MVC3 Razor出现后我们就可以选择不再使用asp.net master 模板页。取而代之的是cshtml razor的模板文件。用法个人认为还是和master模板页类似。但在mater模板页的原有功能上有了进一步扩展,更方便开发。
新建MVC3项目的时候会在View中自动生成_ViewStart.cshtml文件(功能:每个页面加载的时候都会加载这个文件中引用页面(自动生成的模板页)),我们就无需在每一个具体的View页面引入模板页。减少View页面内的重复代码。具体的可以建立一个MVC3 Application 选择razor模板,VS会自动建立上述机制。你也可以自己定义自己的布局页面 如:在Shared文件夹中新建_MyLayout.cshtml页面 将_ViewStart.cshtml文件中的地址改为:
@{
Layout = "~/Views/Shared/_MyLayout.cshtml";}启动的时候就会加载你定义的页面,这样就可以做一个功能如:根据不同的角色或者用户加载不同的布局页面。
小技巧 : 在 ASP.NET MVC3 中,如果一个在View文件夹或Shared文件夹中的视图以"_"开头命名的话,外部是不能单独访问他的,他只能作为局部视图嵌套在其他视图中。为什么?我只能这样解释 因为MVC3的加载机制过程是: 执行Controller → Model → View+_ViewStart.cshtml的顺序,然后把产生的页面带回到原来的View中再回传。
1,@RenderBody()方法:直接渲染整个View到占位符处,而不需要原来所使用的,只能在_Layout.cshtml中使用一次
2,@RenderSection方法。可以让我们在模板页预设一个区域,未来给继承该模板页的View使用。具体请看以下操作:
在MVC3.0 shared文件夹下_Layout.cshtml这个模板文件内加入以下代码:
<!DOCTYPE html>
<html><head> <title>@ViewBag.Title</title> <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script> @RenderSection("Head", required: false) //当为true的时候 每一个页面都要加@section Head{ 内容} 这个标签,不然就报错。</head><body><div class="page">以上代码第7行,预留出一个Head的section。 熟悉模板页的人,应该明白该处是预留是给未来具体的
View页面自定义特定js/css使用的。
这个View我们就用默认的Home底下的Index来举例。打开index.cshtml 写入以下代码@{
ViewBag.Title = "Home Page";}<h2>@ViewBag.Message</h2>@section Head{ <script type="text/javascript"> $(function () { alert("hello jquery"); }); </script>}该View已经集成了_Layout.cshtml模板页,这里只是填充模板页内的Head section这时就可以加入我们的针对每个view页面的js或者CSS了。至此达到共性外的个性。
只要你在_Layout.cshtml模板页面加了 @RenderSection("Head", required: true) ,required参数值:true 时候,一定要在其他的视图页面加上@section Head{
<script type="text/javascript"> $(function () { alert("hello jquery"); }); </script>}注意可以随便添加在哪里都可以的,Head为自定义标签 可以自己改动 。未完待续。。。。。。