Вопрос

Я люблю MVC, но не вижу, чтобы понять, как вы должны реализовать пользовательские элементы управления. Если у меня есть несколько просмотров с деталями корзины для покупок, как я могу инкапулировать представление и код корзины для покупок, чтобы мне не приходилось возвращать данные корзины с помощью каждого контроллера ViewData?

Это было полезно?

Решение

Вы должны вернуть данные корзины в каждом действии контроллера, которое вернет представление, которое использует пользовательский контроль корзины. Но есть методы, чтобы избежать повторения кода. Вы можете украсить метод действия с помощью пользовательского ActionFilterAttribute, который ввеет соответствующие данные в событие OnaXctionExeceed, или вы можете добавить данные корзины в словарь ViewData в методе инициализации базового контроллера, а затем получить доступ к ним в управлении с помощью ViewData ["Magic String"] или Create Метод расширения на htmlhelper, чтобы избежать магических строк.

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

Из это MSDN Page:

Частичное представление позволяет вам определить представление, которое будет отображаться внутри родительского представления. Частичные представления реализованы как элементы управления пользователем ASP.NET (.ascx).

Запишите свой вид в корзину с частичным видом. В пределах зрения вы звоните Html.RenderPartial("PartialNameHere") Чтобы представить это в любое место на странице, из которого вы его назвали. Как и взгляды, вы можете иметь твердое частичное представление, чтобы вы могли передать модель любого типа, который вы выберете.

Обратите внимание на следующее (также по ссылке MSDN выше; акцент мой):

Когда частичный вид создается, он получает свой собственный Копия объекта ViewDateCtionary, который доступен для родительского представления. Таким образом, частичное представление имеет доступ к данным родительского представления. Однако, если частичное представление обновляет данные, эти обновления влияют только на объект ViewData частичного представления. Данные родительского представления нет измененный.

Другие ответы точно верны, но есть второй вариант. Вы можете представить свое частичное представление в результате вызова Ajax к действию контроллера, посвященного вашему частичному представлению. Таким образом, ваш частичный вид должен иметь дело с моделью, которая имеет данные, о которой она заботится.

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