ASP> net MVC многоразовые партиалы - PullRequest
7 голосов
/ 11 января 2011

Поработав с .net в обеих формах winforms и ASP.net в течение нескольких лет, я сейчас начинаю работать в MVC (немного поздно, я знаю). Одна большая путаница для меня - это концепция многократно используемых «компонентов», аналогичная концепции пользовательского контроля в веб-формах.

Например, я бы хотел, чтобы в области участников моего сайта было несколько «виджетов», одним из которых является информация о зарегистрированном менеджере учетных записей пользователей. Я могу создать это как частичное, однако, когда страница загружается, данные должны быть переданы как часть ViewModel / View Data. Я хотел бы использовать этот виджет в нескольких различных разделах, что означало бы, что мне нужно поместить код для передачи данных в несколько различных контроллеров. Кажется, это нарушает принцип СУХОГО, или я что-то здесь упускаю? В идеале я хотел бы, чтобы все было заключено в 1 частичку, которую затем можно использовать на любой странице.

1 Ответ

4 голосов
/ 11 января 2011

Вы можете пойти тремя путями:

1) Для простых элементов управления без особой логики вы можете создать новый экземпляр пользовательской модели представления для элемента управления: Html.RenderPartial ("YourControl", новый YourControlViewModel () {Param1 = "value1", Param2 = Model.AnotherValue});

2) Если вам нужна некоторая логика для управления, вы можете использовать Html.RenderAction ("ActionName", "SomeControllerName", RouteValuesDictionary); Он вызовет стандартное действие контроллера, использует представление и вставит полученный результат обратно на страницу. Вы можете добавить атрибут [ChildActionOnly] в метод контроллера, чтобы гарантировать, что метод будет доступен только из Html.RenderPartial. Это немного нарушает принцип MVC (view не должен вызывать контроллер), но отлично подходит для виджетов и используется в мире Ruby on Rails без особых проблем. Вы можете проверить большую статью от Haacked

3) Создание настраиваемого помощника по HTML для таких задач, как настраиваемое форматирование даты, расчет и т. Д.

В вашем случае я бы выбрал номер два.

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