强制所有区域使用相同的布局
我有以下项目结构:
/查看/共享/ _layout;
/地区/区域1 /浏览/ ControllerName /指数;
...
有什么办法可以强制所有区域使用_Layout作为基础布局吗?
有没有办法做到这一点,而无需添加_ViewStart文件(例如,通过路由配置)?
也可以看看:
如何在ASP.NET MVC 3剃须刀ViewStart文件中指定不同的布局?
你只需要添加一个名为:
_ViewStart.cshtml
在每个区域视图文件夹下:
/Areas/Area1/Views/_ViewStart.cshtml
并编辑文件以指向这样的根布局:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
为了达到这个目的,你不必在视图的布局属性中指定一个值,如果你这样做,你会覆盖全局布局
注意:正如托尼提到的,你可以编辑每个视图的布局属性来指向根布局,但这不是推荐的方法,因为你会将视图与布局耦合,并改变它会很痛苦
编辑1
如果您想使用代码来设置默认视图的布局,也许您应该考虑编写自定义视图引擎。
尝试谷歌有关自定义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助手:
通过设置Area =“”将RouteValueDictionary参数添加到任何ActionLink调用中。 请注意,空字符串指的是根级别。 这将允许这些链接在从一个区域内调用时正确地工作,当从根调用时仍然工作。
例如:
<li>@Html.ActionLink("Home", "Index", "Home", new { Area = "" }, null)</li>
您可以使用
@ {Layout =“_Layout”; }
如果你想让这更容易一次全部改变。 也许你可以将它设置为一个视图包变量并将其传递到控制器上。 为了使它更容易,您可以创建一个基础控制器,其他控制器继承自基础控制器,并让它将布局分配给视图包。
不知道为什么布线需要改变,或者我不了解。 希望这可以帮助 :)
链接地址: http://www.djcxy.com/p/80089.html上一篇: Force all Areas to use same Layout
下一篇: How do you define a layout for specific areas in ASP.Net MVC 4?