我已经设置了一个菜单控制器来根据正在使用的其他控制器来驱动顶层菜单链接。每个其他控制器的每个视图都有一个单独的嵌套母版页。
所以,我有一个菜单控制器,它有几个方法可以返回viewresults,每个控制器一个,或者站点的“section”。因此,目前这些方法中的每一个都有自己的视图来呈现菜单。但每个渲染菜单的视图都是相同的代码,唯一改变的是控制器方法中的逻辑,基于哪些链接进行渲染。
有没有办法让所有这些控制器操作都针对同一个视图?既然所有观点都相同?
感谢
答案 0 :(得分:23)
是的,这是一种常见做法。
return View("Menu");
答案 1 :(得分:3)
创建一个强类型视图,该视图采用指定菜单内容的容器。将此作为参数传递给return语句。
var thisMenu = CreateMenuForThisRequest();
return View ("Menu", thisMenu);
答案 2 :(得分:2)
这取决于您使用的ASP MVC的版本;使用MVC 2,您可以创建一个ascx控件并使用RenderAction
在你的视图中,你会添加类似
的内容Html.RenderAction("Menu", "Navigation");
并拥有一个带有菜单动作结果的导航控制器
public class NavigationController : Controller
{
[ChildActionOnly]
public ActionResult Menu()
{
Menu model;//your menu
return PartialView("YourMenuAscxControlName", model);
}
}
我认为如果你使用MVC 1,MVC Future项目有RenderAction,但我不确定。
答案 3 :(得分:0)
对于我的菜单,我使用RenderAction方法 我也在使用Steve Sanderson的ActionOutputCacheAttribute http://blog.stevensanderson.com/2008/10/15/partial-output-caching-in-aspnet-mvc/
使用此缓存,您将大大增加网站加载时间