Mik*_*ail 79 asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas razor
我有以下项目结构:
/查看/共享/ _layout;
/地区/区域1 /浏览/ ControllerName /指数;
...
有没有办法强制所有区域使用_Layout作为基本布局?
有没有办法在不添加_ViewStart文件的情况下执行此操作(例如,通过路由配置)?
也可以看看:
Jup*_*aol 144
您只需添加一个名为的文件:
_ViewStart.cshtml
Run Code Online (Sandbox Code Playgroud)
在每个区域视图文件夹下:
/Areas/Area1/Views/_ViewStart.cshtml
Run Code Online (Sandbox Code Playgroud)
并编辑文件以指向根布局,如下所示:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)
为了使其工作,您不必在视图的布局属性中指定值,如果这样做,您将覆盖全局布局
注意:正如Tony提到的,您可以编辑每个视图的布局属性以指向根布局,但是这不是推荐的方法,因为您将视图与布局耦合并更改它将是痛苦的
如果您想使用代码来设置默认视图的布局,也许您应该考虑编写自定义视图引擎.
试着谷歌关于自定义RazorViewEngine和RazorView
这篇文章可能是一个很好的起点
http://weblogs.asp.net/imranbaloch/archive/2011/06/27/view-engine-with-dynamic-view-location.aspx
我没有做过这样的事情,但我希望我能指出你正确的方向
小智 20
扩大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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34611 次 |
| 最近记录: |