ASP.NET MVC, частичные представления и данные - PullRequest
5 голосов
/ 24 июня 2010

Кто-нибудь может уточнить, почему вы определяете ViewData ["MenuData"] для каждого действия для чего-то вроде динамического меню?

У меня есть простое частичное представление, которое отображает меню, я отображаю это меню изна главной странице.Для меня это интуитивно понятно из ASP.NET WebForms, но единственный способ заполнить меню - это передать ViewData ["MenuData"], но затем я должен делать это в каждом действии контроллера.Мне кажется немного глупым, что мне придется каждый раз определять эти данные представления.

С точки зрения тестируемости и что такое ASP.NET MVC-ish, как мне подходить к этому?

Ответы [ 2 ]

4 голосов
/ 24 июня 2010

Другой вариант - использовать вместо этого метод RenderAction, который вызовет действие (либо на текущем контроллере, либо, если вы также указали имя контроллера, этот контроллер), которое затем может быть построено данные меню для вас, и вызвать ваш частичный вид ascx:

Так что на моей главной странице я могу иметь:

<% Html.RenderAction("MenuArchiveList"); %>

Тогда в моем контроллере:

public ActionResult MenuArchiveList() {
  return PartialView("BlogArchiveList",
                     _BlogRepository.GetArchiveYearPostCounts());
}

Затем успешно находит пользовательский элемент управления \Views\Shared\BlogArchiveList.ascx

Если вы хотите, чтобы ваше действие вызывалось только в контексте частичного представления, вам следует украсить его ChildActionOnlyAttribute.

Это было добавлено в System.Web.Mvc в версии 2 из пространства имен "futures" Microsoft.Web.Mvc.

0 голосов
/ 24 июня 2010

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

см. Здесь Рекомендации по использованию ViewModel

...