c# - 我怎样才能更好地处理 ASP.NET MVC 中有关我的部分 View 的这种情况?

标签 c# asp.net-mvc partial-views

我有一个单独的 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/

相关文章:

c# - 在 c# (Vsto) 的 Excel 2007 中保存 Excel 模板 2003 时出现问题

ajax - 命名空间 'System.Web.Mvc' 中不存在“Ajax”

c# - SaveChanges() 的验证错误

javascript - 如何将部分 View 放入 JavaScript 中的 div 中(使用 jQuery)

c# - 从上下文菜单发送对父对象的引用

c# - 由方法而不是构造函数创建的假对象

c# - 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制?

C# 部署将 VisualSVN 存储库主干托管为 Web 服务器上的 MVC 网站 ('run' 项目)

javascript - 将 JavaScript 放在分部 View 中是否可以

c# - Html.RenderPartial 上的 MVC System.Web.HttpCompileException