ASP.NET MVC, частичные представления и данные

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

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

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

5
задан John Leidegren 24 June 2010 в 10:56
поделиться

2 ответа

Другой вариант - использовать метод 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.

4
ответ дан 15 December 2019 в 00:50
поделиться

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

см. здесь ViewModel Best Practices

0
ответ дан 15 December 2019 в 00:50
поделиться