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(推荐,有图有真相)
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。