Как передать viewmodel на макет/главную страницу? - программирование
Подтвердить что ты не робот

Как передать viewmodel на макет/главную страницу?

Имея googling в течение некоторого времени, я немного смущен тем, как это сделать в asp mvc 3.

Итак, задача состоит в том, чтобы иметь общую страницу макета (или мастер?) для нескольких видов контроллеров. Все представления строго типизированы... Эта страница макета фактически визуализирует некоторый сильно типизированный объект. Поэтому мне нужно передать этот объект на страницу макета, чтобы передать его в "Html.RenderPartial()" или сделать его прямо на странице.

Статья Передача данных для просмотра основных страниц (С#) (хотя и старая для mvc2) дает пример для предоставления базовой абстракции класса контроллера, передав модель в ViewData. Это может быть лекарство.

Но...

В некоторых потоках я нашел способ сделать строго типизированную главную страницу:

<%@ Master ... Inherits="System.Web.Mvc.ViewMasterPage<MyWeb.Models.Client>" %>

Итак, есть ли такой же подход в mvc3? Или единственный способ передать данные на страницу макета - использовать ViewBag или ViewData?

Прочитав как лучше всего привязать данные ViewModel к главной странице в asp.net-mvc, я посчитал Дарина ответом, но все же думаю, что это куча представлений будет иметь одинаковую компоновку и не видит причин идти против принципа DRY.

Итак, как передать строго типизированные объекты в макеты страниц? Или я что-то перепутал?

4b9b3361

Ответ 1

Это интересная тема для обсуждения → передача view models на главную страницу/макет vs ViewBags.

Я -hate - используя ViewBags, поэтому у меня есть модели просмотра для всех моих слоев. Начиная с _layout.cshtml и вверх. Любое представление, в котором используется макет.. ну.. эта модель взгляда просто наследует макет.. или любой вид ниже ниже.. и это повторяется до тех пор, пока вы не достигнете нижнего уровня, который обычно является _layout...

My Проект RavenOverflow содержит пример кода, который показывает это.