谁能详细说明为什么要在每个 Action (例如动态菜单)上定义ViewData [“MenuData”]?
我有一个呈现菜单的简单局部 View ,我从母版页中呈现此菜单。这是我从ASP.NET WebForms传来的直观信息,但是填充菜单的唯一方法是传递ViewData [“MenuData”],但是然后我必须在每个 Controller 操作中都执行此操作。确实有点愚蠢,我每次都必须定义此 View 数据。
在可测试性和什么是ASP.NET MVC方面,我应该如何处理?
最佳答案
另一种选择是改用 RenderAction
方法,该方法将调用一个操作(在当前 Controller 上,或者如果您还提供 Controller 名称,则在该 Controller 上),然后可以为您构建菜单数据,并调用ascx部分看法:
因此,在我的母版页上,我可以拥有:
<% Html.RenderAction("MenuArchiveList"); %>
然后在我的 Controller 中:
public ActionResult MenuArchiveList() {
return PartialView("BlogArchiveList",
_BlogRepository.GetArchiveYearPostCounts());
}
然后,这将成功找到用户控件
\Views\Shared\BlogArchiveList.ascx
如果要确保仅在局部 View 的上下文中调用操作,则应使用
ChildActionOnlyAttribute
装饰它。它是从“ future ”命名空间Microsoft.Web.Mvc中添加到System.Web.Mvc的版本2中的。
关于asp.net-mvc-2 - ASP.NET MVC,部分 View 和数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3109303/