Mvc示例之四Razor模板(一)

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,并实际写一个小例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值