#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