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

时间:2010-06-24 10:56:53

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

有人可以详细说明为什么要为动态菜单之类的动作定义ViewData [“MenuData”]吗?

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

在可测试性和ASP.NET MVC方面,我该如何处理?

2 个答案:

答案 0 :(得分:4)

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

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

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

然后在我的控制器中:

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

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

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

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

答案 1 :(得分:0)

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

ViewModel Best Practices