【问题标题】:ASP.NET MVC, partial views and dataASP.NET MVC,部分视图和数据
【发布时间】:2011-03-07 18:17:33
【问题描述】:

谁能详细说明您为什么要在每个动作上为动态菜单之类的东西定义 ViewData["MenuData"]?

我有一个呈现菜单的简单局部视图,我从母版页中呈现此菜单。这对来自 ASP.NET WebForms 的我来说是直观的,但我填充菜单的唯一方法是传递 ViewData["MenuData"],但是我必须在每个控制器操作中执行此操作。感觉有点傻,每次都要定义这个视图数据。

就可测试性和什么是 ASP.NET MVC 而言,我应该如何处理这个问题?

【问题讨论】:

    标签: asp.net-mvc-2 dynamic-data


    【解决方案1】:

    另一种选择是使用RenderAction 方法来调用一个动作(在当前控制器上,或者如果您还提供控制器名称,则该控制器),然后可以为您构建菜单数据,并调用您的 ascx 部分视图:

    所以在我的母版页上我可以:

    <% Html.RenderAction("MenuArchiveList"); %>
    

    然后在我的控制器中:

    public ActionResult MenuArchiveList() {
      return PartialView("BlogArchiveList",
                         _BlogRepository.GetArchiveYearPostCounts());
    }
    

    这样就成功找到了用户控件\Views\Shared\BlogArchiveList.ascx

    如果您想确保只在局部视图的上下文中调用您的操作,那么您应该使用 ChildActionOnlyAttribute 来装饰它。

    这是在版本 2 中从“futures”命名空间 Microsoft.Web.Mvc 添加到 System.Web.Mvc 中的。

    【讨论】:

      【解决方案2】:

      你应该使用一个基础控制器来处理你的视图模型的重复填充,然后让你的所有控制器都派生自它

      看这里ViewModel Best Practices

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 1970-01-01
        相关资源
        最近更新 更多