Как и многие другие на этом сайте, я рассматриваю возможность перехода на ASP.NET MVC для будущих проектов. В настоящее время на моих сайтах используются традиционные веб-формы ASP.NET 2.0, и у нас это работает нормально, поэтому мой другой вариант - просто придерживаться того, что я знаю, и перейти на ASP.NET 3.5 с интегрированным материалом AJAX.
Мне интересно, как работают пользовательские элементы управления в ASP.NET MVC. У нас есть тонны элементов управления .ASCX и несколько составных элементов управления. Когда я работаю с веб-дизайнерами, очень легко заставить их эффективно использовать элементы управления ASCX, даже без каких-либо знаний в области программирования, так что это несомненный плюс. Но, конечно же, недостатками являются жизненный цикл страницы, который может сводить с ума, и тот факт, что элементы управления ASCX трудно использовать в разных проектах. Композитные элементы управления доступны для совместного использования, но по сути представляют собой черный ящик для дизайнера.
Какая модель используется в ASP.NET MVC? Есть ли способ создать элементы управления, которые решают проблемы, с которыми мы столкнулись при использовании ASCX и составных элементов управления? Предоставление легкого доступа веб-дизайнерам, не беспокоясь о взломе кода, является важным фактором.





Чтобы реализовать пользовательский элемент управления, выполните следующий вызов:
<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %>
Вы также можете увидеть старый синтаксис, который с PR5 больше не действителен.
<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %>
Вам всегда придется беспокоиться о нарушении кода при переходе с веб-форм на MVC, однако команда ASP.NET MVC проделала большую работу, чтобы минимизировать проблемы.
Как предположил Ник, вы действительно сможете отображать свои пользовательские элементы управления, но, очевидно, цикл страниц, pagestate и обратная передача из традиционных веб-форм ASP больше не будут работать, что делает ваши элементы управления, скорее всего, бесполезными.
Я думаю, вам придется переписать большинство ваших сложных элементов управления для переноса веб-сайта в MVC, в то время как простые элементы управления, которые, например, обеспечивают только форматирование и не имеют статуса обратной передачи, должны просто работать. Код, предоставленный Ником, в этом случае будет просто работать.
Что касается совместного использования между большим количеством проектов: я думаю, что элементы управления будут больше похожи на «повторно используемые компоненты HTML-рендеринга», которые можно использовать на веб-сайте, а не на «повторно используемые компоненты кода» с логикой (например, элементы управления WebForms). Ваша веб-логика будет / должна находиться в контроллерах страниц, а не в элементах управления HTML. Поэтому совместное использование элементов управления для большего количества проектов не будет таким полезным, как в случае с WebForms.
Да, вы можете сделать RenderPartial. Хорошее начало. Но в конечном итоге этим ребятам понадобится логика и другие типы контроллеров. Следите за реализацией субконтроллера от команды фреймворка. Скоро что-то должно появиться и в MvcContrib. Или сверните свой собственный.
Редактировать: Я только что написал об этом здесь: http://mhinze.com/subcontrollers-in-aspnet-mvc/
MVC имеет другой жизненный цикл страницы по сравнению с вашим пользовательским элементом управления.
Вы можете подумать об этом, чтобы переписать.
Aspx - это Посмотреть. Еще нужно переписать, синтаксис другой. JavaScript будет работать. Но я не думаю, что WebControls будет работать. Потому что MVC больше не имеет состояния просмотра и обратной передачи.
Для кода позади (aspx.cs) вам необходимо преобразовать его в класс Контроллер.
Метод Page_Load больше не работает. Вероятно, вы оставите это методу Index().
Модель - это просто классы сущностей, которые использует ваш код.
Вывод, это полная переработка. Ваше здоровье. Удачного кодирования.