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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
0
4 717
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Чтобы реализовать пользовательский элемент управления, выполните следующий вызов:

<% 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().

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

Вывод, это полная переработка. Ваше здоровье. Удачного кодирования.

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