ASP.Net Меню MVC3 с другой моделью в качестве содержимого (частичный просмотр, страница визуализации?)

#asp.net-mvc-3 #model #renderpartial

#asp.net-mvc-3 #Модель #renderpartial

Вопрос:

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

Мастер-страница / Макет:

 <body>
<div id="IndexMenu">
    <div id="IndexMenuInner">@RenderPage("~/Views/Admin/part/_Menu.cshtml", new { LocationAdminModelCollection = new Model; })</div>
</div>
<div id="BodyContent">
    @RenderBody()
</div>
  

Страница индекса / содержимого, которая вызывается при запуске:

 @model Survey.WebApplication.Models.ChecklistDetailsModel

@{
    ViewBag.Title = "Survey Administration";
    Layout = "~/Views/Admin/_Layout.cshtml";
}

<link href="@Url.Content("~/Content/Admin/Menu.css")" rel="stylesheet" type="text/css" />

<div id="IndexSubMenu">sub_Menu</div>

<div>
<div id="IndexMenuInner"></div>
</div>
  

Мое меню:

 @model Survey.WebApplication.Models.LocationAdminModelCollection

@{
    Layout = null;
}

<div class="menuLocation">

</div>
  

Как я могу это сделать?

Ответ №1:

Я бы использовал Html.RenderAction для отображения действия на вашем контроллере. В этом действии вы просто создаете модель, которая нужна вашему меню, и передаете частичный просмотр Menu.cshtml в качестве результата PartialViewResult

Поэтому вместо @RenderPage("~/Views/Admin/part/_Menu.cshtml", new { LocationAdminModelCollection = new Model; })

вы бы сделали:

 @{ Html.RenderAction("Menu", "Site"); }
  

Где сайт — это ваш SiteController, а меню — что-то вроде:

 public ActionResult Menu()
{
    return PartialView("Menu", new { LocationAdminModelCollection = new Model });
}
  

Отказ от ответственности

Код не тестировался 🙂

Комментарии:

1. У PartialViewResult нет параметра, и RenderAction отправляет мне ошибку компиляции 🙂

2. Со следующим решением у меня был успех: haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx — Спасибо Nilsen