Asp.net mvc 2 ASP.NET MVC,局部视图和数据

Asp.net mvc 2 ASP.NET MVC,局部视图和数据,asp.net-mvc-2,dynamic-data,Asp.net Mvc 2,Dynamic Data,有人能详细解释一下为什么要在每个动作上定义ViewData[“MenuData”],比如动态菜单吗 我有一个简单的局部视图来呈现菜单,我从母版页中呈现这个菜单。这对于我从ASP.NET WebForms提交来说是直观的,但是我填充菜单的唯一方法是传递ViewData[“MenuData”],但是我必须在每个控制器操作中都这样做。每次我都必须定义这个视图数据,这确实有点愚蠢 就可测试性和ASP.NET MVC ish而言,我应该如何实现这一点?您应该使用一个基本控制器来处理视图模型的重复填充,然后

有人能详细解释一下为什么要在每个动作上定义ViewData[“MenuData”],比如动态菜单吗

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


就可测试性和ASP.NET MVC ish而言,我应该如何实现这一点?

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


请参见此处

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

因此,在我的主页上,我可以有:

<% Html.RenderAction("MenuArchiveList"); %>
然后,它成功地找到用户控件
\Views\Shared\BlogArchiveList.ascx

如果要确保仅在局部视图的上下文中调用操作,则应使用
ChildActionOnlyAttribute
对其进行修饰

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

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