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(推荐,有图有真相)

 

 

 

 

你可能感兴趣的:(layout)