我有以下项目结构:
/查看/共享/ _layout;
/地区/区域1 /浏览/ ControllerName /指数;
...
- /地区/ AreaN /浏览/ ControllerName /索引。
有没有办法强制所有领域使用_layout为基地的布局 ?
有没有办法做到这一点不添加_ViewStart文件(例如,通过配置路由)?
也可以看看:
如何指定在ASP.NET MVC 3剃须刀ViewStart文件不同的布局?
我有以下项目结构:
/查看/共享/ _layout;
/地区/区域1 /浏览/ ControllerName /指数;
...
有没有办法强制所有领域使用_layout为基地的布局 ?
有没有办法做到这一点不添加_ViewStart文件(例如,通过配置路由)?
也可以看看:
如何指定在ASP.NET MVC 3剃须刀ViewStart文件不同的布局?
你只需要添加一个文件名为:
_ViewStart.cshtml
在每个地区查看文件夹:
/Areas/Area1/Views/_ViewStart.cshtml
和编辑文件指向根布局是这样的:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
为了使这一工作,你不必指定视图的布局属性的值,如果你这样做,你会被重写全球布局
注:由于托尼提到的,您可以编辑每个视图的布局属性指向根布局,然而这并非是推荐的方式做到这一点,因为你将与你的布局来连接你的观点,改变这将是痛苦的
如果你想用代码来设置默认视图的布局,或许你应该考虑写一个自定义视图引擎。
试着google一下定制RazorViewEngine
和RazorView
这篇文章可能是一个很好的起点
http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx
我没有做过这样的事情,但我希望我指点你在正确的方向
扩大对Jupaol答案....
至少在VS2013中,_ViewStart.cshtml文件默认情况下,在创建区域时增加,所以它已经存在,并且他指出指向根_Layout.cshtml你可以改变的内容。 然后,您可以删除_Layout.cshtml在该地区,因为它不再使用(现在混乱的潜在来源)
然而,这样做在根_Layout.cshtml进行任何路由需要考虑的地方。
默认_Layout.cshtml有许多需要稍微修改ActionLink的助手:
在RouteValueDictionary PARAM添加到任何ActionLink的设置面积=“”调用。 需要注意的是空字符串指根级别。 这将允许从区域内调用时这些链接才能正常工作,还从根本上调用时工作。
例如:
<li>@Html.ActionLink("Home", "Index", "Home", new { Area = "" }, null)</li>
您可以使用指定的布局:
@ {布局= “_layout”; }
如果你想使这更容易改变的一次。 也许你可以设置它作为视图包变量,并传递它的控制器上。 为了使它更容易,你可以创建一个基控制器,其他控制器继承并将其分配布局视图袋那里。
不知道为什么路由需要改变或者也许我不理解。 希望这可以帮助 :)