Каков наилучший способ реализации пользовательских элементов управления в ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/41717

  •  09-06-2019
  •  | 
  •  

Вопрос

Как и многие другие на этом сайте, я рассматриваю возможность перехода на 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 проделала большую работу, чтобы свести проблемы к минимуму.

Другие советы

Как предположил Ник, вы действительно сможете отображать свои пользовательские элементы управления, но, очевидно, что page-cycle, pagestate и postback из традиционных веб-форм ASP больше не будут работать, что делает ваши элементы управления, скорее всего, бесполезными.

Я думаю, вам придется переписать большинство ваших сложных элементов управления, чтобы перенести ваш веб-сайт на MVC, в то время как простые элементы управления, которые, например, обеспечивают только форматирование и не имеют статуса обратной отправки, должны просто работать.Код, предоставленный Ником, будет просто работать в этом случае.

И о совместном использовании между другими проектами:Я думаю, что элементы управления будут больше похожи на "повторно используемые компоненты HTML-рендеринга", которые могут быть общими для всего веб-сайта, а не на "повторно используемые компоненты кода" с логикой (например, элементы управления WebForms).Ваша веб-логика будет / должна быть в контроллерах страниц, а не в элементах управления HTML.Поэтому совместное использование элементов управления в большем количестве проектов не будет таким полезным, как в случае с WebForms.

MVC имеет другой жизненный цикл страницы по сравнению с вашим пользовательским элементом управления.

Вы можете подумать о том, чтобы переписать это заново.

aspx - это Вид.Вам все равно нужно переписать, синтаксис другой.JavaScript будет работать.Но я вряд ли нахожу, что WebControls будет работать.Потому что в MVC больше нет viewstate и postback.

Для исходного кода (aspx.cs) вам нужно преобразовать его в Контроллер класс.Page_Load метод больше не будет работать.Вы, вероятно, оставите это на усмотрение Index() способ.

Модель это просто классы сущностей, которые использует ваш код, стоящий за ними.

Вывод: это полное переписывание.Ваше здоровье.Счастливого кодирования.

Да, вы можете сделать RenderPartial .Это хорошее начало.Но в конце концов этим ребятам понадобится логика и другие материалы типа контроллеров.Будьте в поиске реализации субконтроллера от команды разработчиков фреймворка.Скоро также должно появиться что-то в MvcContrib.Или сверните свой собственный.

Редактировать: Я только что написал об этом здесь: http://mhinze.com/subcontrollers-in-aspnet-mvc/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top