-1

Мне нужно отправить 2 разных Models, один в Index view и еще один на _Layout.cshtml, как я могу это сделать?Как отправить модель в _Layout.cshtml (мне также нужно отправить другую модель в индексный вид)

Мои HomeController:

[Route("")] 
public ActionResult Index() 
{ 
    HomeViewModel model = new HomeViewModel(); 
    model.A = _repoA.GetLatest(4); 
    model.B = _repoB.GetLatest(4); 
    model.C = _repoC.GetLatest(4); 
    return View(model); 
} 

Я не люблю использовать ViewBag, ViewData & ..., я ищу для прохождения модели таким же образом, как мы передаем модель в Views.

+0

возможно дубликат [ASP.NET MVC Razor передать модель в макете] (http://stackoverflow.com/questions/4154407/asp-net-mvc-razor-pass-model-to-layout) – Lordbalmon

+1

Почему бы не создать частичный вид с моделью и не сделать ее в макете. –

+0

Это звучит здорово, но я предпочитаю делать это без этого решения, есть ли способ отправить модель прямо в _layout? –

ответ

1

Вам нужно будет отправить его в ViewBag. Я обнаружил, что лучше всего было сделать абстрактную контроллер:

public abstract class ApplicationController : Controller 
{ 
    protected ApplicationController() 
    { 
     UserStateViewModel = new UserStateViewModel(); 
     //Modify the UserStateViewModel here. 
     ViewBag["UserStateViewModel"] = UserStateViewModel; 
    } 

    public UserStateViewModel UserStateViewModel { get; set; } 
} 

Тогда все ваши контроллеры наследуют от этого абстрактного контроллера.

В вашем _Layout.cshtml (или как бы вы назвали это), вам необходимо включить следующее в верхней:

@{ 
    var userState = (UserStateViewModel)ViewBag.UserStateViewModel; 
} 

Дубликат но утонченный со 2-го ответа на ASP.NET MVC Razor pass model to layout.

3

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

Наряду с этой строкой в ​​вашем макете вы можете просто сделать свою страницу индекса, как обычно.

@{ Html.RenderAction("_widget", "Home"); } 
+0

Мы не можем использовать RenderAction в _Layout.cshtml. Это приводит к рекурсивному вызову – MirrorBoy

Смежные вопросы