MVC3下的layout页面

1.Layout页基础:
如果你有使用MasterPage的经验,你将会记得如下的几个东西

A:<%@ Master %>

B:<%@ Page %>

C:<asp:ContentPlaceHolder />

D:<asp:Content />

但是在Layout中,以上的这些东西将会消失.(作者不排除有WebPages和WebForms兼容工作的可能性)

取而代之的新功能是:

A.Layout属性:等同于原来的MasterPageFile属性.

B.@RenderBody()方法:直接渲染整个View到占位符处,而不需要原来所使用的<asp:Content />.

C.@RenderPage()方法:渲染指定的页面到占位符处.

D.@RenderSection方法:声明一个占位符,和原来的<asp:ContentPlaceHolder />功能类似.

E.@section标记:对@RenderSection方法声明的占位符进行实现,和原来的<asp:Content />功能类似.

2.实践:

Layout页面作用类似于之前WebForm模板页(MasterPage)的作用,起到页面重用、统一界面风格的作用。

首先,我们新建一个MVC3项目,_Layout.cshtm自动生成,l默认位于Web/Views/Shared/。新建个_MyLayout.cshtml.

如果有页面想套用公用的模板页,只需在页面的开头写@Layout = filePath;即可,如页面Index.cshtml

 1 @{
 2     //Layout = null;    
 3     Layout = "~/Views/Shared/_MyLayout.cshtml";
 4 }
 5 @{
 6     ViewBag.Title = "Home Page";
 7 }
 8 
 9 <h2>@ViewBag.Message</h2>
10 <p>
11     To learn more about ASP.NET MVC visit 
12     <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
13 </p>

假设公用模板页的内容为:

 1 <!DOCTYPE html>
 2 
 3 <html>
 4 <head>
 5     <title>@ViewBag.Title</title>
 6 </head>
 7 <body>
 8     这是_MyLayout........
 9     <div>
10         开始呈现调用本模板页的页面原始内容。。。<br />
11         @RenderBody()  
12         <br /> 
13         结束呈现调用本模板页的页面原始内容。。。<br />
14     </div>
15     再随便写写~~
16 
17     @* @RenderBody();错误,一页智能呈现一次 *@
18     <div>
19         @*RenderPage()可以呈现多次*@
20         @RenderPage("~/Views/Shared/Error.cshtml")
21         @RenderPage("~/Views/Shared/Error.cshtml")
22     </div>
23 </body>
24 </html>

显示的结果如下:

1.如果在首页上不写明@Layout = filePath;

则MVC3自动在本文件夹下寻找_ViewStart.cshtml(里面定义了默认的模板页),使用_ViewStart.cshtml里的模板页设置。如果在本文件夹下找不到,则到上层文件夹下寻找,直到找到_ViewStart.cshtml后使用。如果最终没有找到_ViewStart.cshtml,那么当然,就不用模板页啦!

2.如果在首页上写明@Layout = null;则该页面没有模板页。

链接:http://www.cnblogs.com/highend/archive/2011/04/18/asp_net_mvc3_layout.html(推荐,有图有真相)

原文地址:https://www.cnblogs.com/nlh774/p/3561097.html