Razor模板是Mvc3开始引用的模板,是Mvc开发推荐模板。本节主要介绍Mvc模板及局部页使用、Razor语法,下一节介绍MvcHelper用法并通过一个示例详细讲解Razor模板前后台传值。
Mvc模板
模板页一般放在view的Shared文件夹下面。当加载时会将子页跟模板页合并行程最终结果。
模板页所用语法:
@RenderBody
当在页面中呈现该部分后,表示一个占位。这是子页生成的内容会替换这个占位,合并后行程最终页面。
@RenderPage
该方法是要呈现一个页面,将页面的内容展现在这里。用过asp的同学可能还记得将页面分割为herder.asp。我们现在可以用这个方法这样写:
@RenderPage(“~/Views/Shared/_Header.cshtml”)
带参数
@RenderPage(“~/Views/Shared/_Header.cshtml”,new{parm="my",parm2="you")
调用页面获取参数:
//获取RenderPage() 传递过来的参数
@PageData["param"]
如果我们要在某个视图中定义专门的一节,可以用下面的方法:
@RenderSection
为了防止因缺少节而出现异常,可以给RenderSection()提供第2个参数:
@RenderSection("head", false)
我们用上面的几个方法创建一个模板页:
<!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: true)@*View页面自定义特定js/css使用*@
</head>
<body>
@RenderPage("~/Views/Shared/_Header.cshtml")
@RenderBody()
</body>
</html>
那么定义子页面如下:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
@section Head{
<script type="text/javascript">
$(function () {
alert("hello jquery");
});
</script>
}
<p>执行C#普通语法</p><br/>
@DateTime.Now.Date.ToShortDateString()
<p>执行C#语句段</p>
@{
List<string> list = new List<string> { "Mvc3","Razor" };
list.Add(".Net4");
}
<ul>
@foreach(string s in list)
{
if (string.IsNullOrEmpty(s))
{
<li>空</li>
}
else
{
<li>@s</li>
}
}
</ul>
生成的页面代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
<link href="/Content/Site.css"rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-1.4.4.min.js"type="text/javascript"></script>
<script type="text/javascript">
$(function () {
alert("hello jquery");
});
</script>
</head>
<body>
<h2>Index</h2>
<p>执行C#普通语法</p><br />
2013/3/11
<p>执行C#语句段</p>
<ul>
<li>Mvc3</li>
<li>Razor</li>
<li>.Net4</li>
</ul>
</body>
</html>
本小节参考http://blog.csdn.net/litao2/article/details/8659362%C2%A0
Razor语法
从上面的代码可以看出Razor语法用好看的@代替了<%%>,而且可以将html代码与C#代码混合写。
当需要写C#代码时,只需要加一个@如下
@foreach(User user in ViewBag.Users){
}
如果这是我们想要在这个for循环当中输出html可以这样写
@foreach(User user in ViewBag.Users){
<span>username:</span>
}
如果想输出实际的用户名:
@foreach(User user in ViewBag.Users){
<span>username:</span>
@user.Username
}
这相当于<%=Html.Encode(user.Username)%>,那么如果username中含有html代码怎么办呢?可以用@Html.Raw(user.Username)输出,这样html代码不会被转义,会当作Html代码解析。
现在,如果我们开头的语句不是自带语句块怎么办呢?比如,我们想定义几个变量。可以这样写
@{
Varstr1=”123”;
Varnum1=123;
}
又,当我们想要输出字符拼接字符串,又不像定义变量时可以这样写:
@(“123”)
另外,在Razor下定义命名空间,注释等也很好写:
@using System;
/*定义变量*/
最后,给出Razor的其他语法:
语法名称 | Razor 语法 | Web Forms 等效语法 |
---|---|---|
代码块 | @{ int x = 123; string y = "because."; }
| <% int x = 123; string y = "because."; %>
|
表达式(默认encode) | <span>@model.Message</span>
| <span><%: model.Message %></span>
|
表达式(不encode) | <span> @Html.Raw(model.Message) </span> | <span><%= model.Message %></span>
|
结合文本和标记的循环 | @foreach(var item in items) { <span>@item.Prop</span> }
| <% foreach(var item in items) { %> <span><%: item.Prop %></span> <% } %>
|
代码和文本混合 | @if (foo) { <text>Plain Text</text> }
| <% if (foo) { %> Plain Text <% } %>
|
代码和文本混合
| @if (foo) { @:Plain Text is @bar }
| 同上 |
Email 地址 | Hi philha@example.com | Razor 认识基本的邮件格式.可智能识别. |
显示表达式 | <span>ISBN@(isbnNumber)</span>
| 在括号里可以有些简单的操作.扩展一下就是@(20*pageIndex)输出运算结果 |
输出@符号
| <span>In Razor, you use the @@foo to display the value of foo</span>
| 要显示@符号,用两个@符号"@@"表示. |
服务器端注释 | @* This is a server side |
好了,本节就讲到这里,下一节讲解一下Razor Helper,并实际写一个小例子。