我有一个视图,左侧有一个菜单,右侧有一个容器,它是从几个局部视图之一呈现的。
现在我遇到了类似以下“索引”视图的情况:
<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 中维护我的 currentPane,我会更喜欢。
我能做些什么来完全避免这种情况吗?我考虑过对公共部分使用主视图,但我需要它是强类型的主视图,这在 ASP.NET MVC 中并不容易。
谢谢!