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