代码之家  ›  专栏  ›  技术社区  ›  John Leidegren

ASP.NET MVC,局部视图和数据

  •  5
  • John Leidegren  · 技术社区  · 14 年前

    我有一个简单的局部视图来呈现一个菜单,我从母版页中呈现这个菜单。这对于我从ASP.NET WebForms提交来说是直观的,但是填充菜单的唯一方法是传递ViewData[“MenuData”],但是我必须在每个控制器操作中都这样做。每次我都要定义这个视图数据,这确实有点愚蠢。

    在可测试性和什么是ASP.NETMVC方面,我应该如何处理这个问题?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Zhaph - Ben Duguid    14 年前

    另一个选择是使用 RenderAction 方法,该方法将调用一个操作(在当前控制器上,或者如果您也提供了控制器名称,则调用该控制器),然后可以为您生成菜单数据,并调用您的ascx局部视图:

    所以在我的主页上我可以有:

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

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

    然后成功地找到用户控件 \Views\Shared\BlogArchiveList.ascx

    如果您想确保您的操作只在局部视图的上下文中被调用,那么您应该用 ChildActionOnlyAttribute .

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

        2
  •  0
  •   Community CDub    7 年前

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

    ViewModel Best Practices