У меня есть один вид, который имеет меню с левой стороны и контейнер с правой стороны, который отображается из одного из нескольких частичных видов.
Сейчас я сталкиваюсь с ситуацией, подобной следующему представлению «Индекс»:
<div class="container">
<div class="leftHandMenu">
// various dynamic menu items
</div>
<div class="rightHandPane">
<% if (Model.CurrentPane == "Sent") { %>
<% Html.RenderPartialView("SentPartial", Model.SomeData); %>
<% } else if (Model.CurrentPane == "Inbox") { %>
<% Html.RenderPartialView("InboxPartial", Model.SomeData); %>
<% } else if (Model.CurrentPane == "Alerts") { %>
<% Html.RenderPartialView("AlertsPartial", Model.SomeData); %>
<% } %>
</div>
// various other common view items
</div>
со следующими действиями:
public ActionResult Inbox(int? page)
{
MessageListViewModel viewData = new MessageListViewModel();
viewData.SomeData = messageService.getInboxMessages(page.HasValue ? page.Value : 0);
viewData.CurrentPane = "Inbox";
return View("Index", viewData);
}
public ActionResult Alerts(int? page)
{
MessageListViewModel viewData = new MessageListViewModel();
viewData.SomeData = messageService.getAlertMessages(page.HasValue ? page.Value : 0);
viewData.CurrentPane = "Alerts";
return View("Index", viewData);
}
public ActionResult Sent(int? page)
{
MessageListViewModel viewData = new MessageListViewModel();
viewData.SomeData = messageService.getSentMessages(page.HasValue ? page.Value : 0);
viewData.CurrentPane = "Sent";
return View("Index", viewData);
}
Я понимаю, что эта ситуация не идеальна, но мне нужно, чтобы эти части оставались частичными взглядами. Я делаю несколько вызовов ajax для этого представления, чтобы перезагрузить этот "rightHandPane" с различными частичными представлениями.
У меня есть одно представление «Индекс», а затем эти различные частичные представления, которые загружают определенную панель «Индекс». Я передаю имя представления в ViewModel, а затем загружаю эти операторы if-else в соответствующем частичном представлении.
Как еще я мог это сделать? Я собираюсь добавить еще 3 частичных представления, и это начинает быть болью. Я бы предпочел, чтобы мне вообще не приходилось поддерживать свою текущую панель в моей ViewModel.
Есть ли что-то, что я могу сделать, чтобы избежать этой ситуации все вместе? Я рассмотрел использование Master View для общих частей, но мне нужно, чтобы он был строго типизированным Master View, что не так просто в ASP.NET MVC.
Спасибо!