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

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

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

Какая модель в ASP.NET MVC? Есть ли способ создать элементы управления, которые решают проблемы, с которыми мы столкнулись, используя ASCX и составные элементы управления? Предоставление легкого доступа веб-дизайнерам без необходимости беспокоиться о нарушении кода является важным фактором.

Ответы [ 4 ]

8 голосов
/ 03 сентября 2008

Для реализации пользовательского контроля вы делаете следующий вызов:

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %>

Вы также можете увидеть более старый синтаксис, который по состоянию на PR5 больше не действителен

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %>

Вам всегда придется беспокоиться о нарушении кода при переходе с веб-форм на MVC, однако команда ASP.NET MVC проделала большую работу, чтобы минимизировать проблемы.

1 голос
/ 04 марта 2011

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

Вы можете рассмотреть это, чтобы переписать.

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

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

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

Заключение, это полное переписывание. Приветствия. Удачного кодирования.

1 голос
/ 05 сентября 2008

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

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

1 голос
/ 03 сентября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...