我有一个单独的 View ,它的左侧有一个菜单,右侧有一个容器,它是从几个部分 View 之一呈现的。
现在我遇到了类似下面“索引” View 的情况:
<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);
}
我意识到这种情况并不理想,但我需要这些部分保持部分观点。我正在对该 View 进行大量 ajax 调用,以使用各种局部 View 重新加载该“rightHandPane”。
我有一个 View “Index”,然后是加载“Index”的特定 Pane 的这些不同的局部 View 。我将 View 名称传递给 ViewModel,然后将这些 if-else 语句加载到适当的局部 View 中。
我还能怎么做呢?我即将添加 3 个局部 View ,这开始变得很痛苦。如果我根本不需要在我的 ViewModel 中维护我的 currentPane,我会更愿意。
我能做些什么来避免这种情况吗?我考虑过对公共(public)部分使用主视图,但我需要它是一个强类型的主视图,这在 ASP.NET MVC 中并不容易。
谢谢!
最佳答案
为什么不为每个操作使用单独的 View ,并使用一个母版页来处理所有公共(public)位?
您可以有一个母版页,每个部分都有一个占位符。
<div class="container">
<div class="leftHandMenu">
<asp:ContentPlaceHolder ID="LeftHandMenuContainer" runat="server" />
</div>
<div class="rightHandPane">
<asp:ContentPlaceHolder ID="RightHandPaneContainer" runat="server" />
</div>
<asp:ContentPlaceHolder ID="FooterContainer" runat="server" />
</div>
然后在各个内容页中放入查看具体内容。
关于c# - 我怎样才能更好地处理 ASP.NET MVC 中有关我的部分 View 的这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1948092/