欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET MVC 3 直到我膝盖中了一箭【3】Razor视图引擎

程序员文章站 2022-03-30 21:57:03
“razor”是一个非常好的新的视图引擎,它提供了流畅的专注于代码的模版方案。它的编码工作流快速、富有表现力并有趣。语法简练并节省按键次数,同时还提升了代码...

“razor”是一个非常好的新的视图引擎,它提供了流畅的专注于代码的模版方案。它的编码工作流快速、富有表现力并有趣。语法简练并节省按键次数,同时还提升了代码的可读性。asp.net的aspx标记语法使用”<%= %>”或”<%: %>”来标记“代码碎块”,每一个代码碎块都需要5个字符来标明代码的开始和结束位置。在razor视图引擎中,你只需要用一个”@”字符就可以标识代码块的开始,与”<% %>”代码碎块不一样,razor不需要你显式指明代码块的结束位置。
1.注释
1     @*我是注释1*@
2     <!--我是注释2-->
3     @{
4         //我是注释3
5     }
2.执行c#语句
1 <b>执行c#语句:</b>
2     @datetime.now.date.toshortdatestring()
3.执行c#代码块

 1 <b>执行c#代码块:</b>
 2     @*支持c#语法:注意“;”*@
 3     @{
 4         list<string> list = new list<string>() { "mvc3", "razor" };
 5         list.add(".net4");
 6         list.add("");
 7     }
 8     @* 支持逻辑关键字如foreach if else等*@
 9     @foreach (string s in list)
10     {
11         if (string.isnullorempty(s))
12         {
13         <li>空</li>
14         }
15         else
16         {
17         <li>@s</li>
18         }
19     }
20     @* 文字输出 变量输出*@
21     @{
22         @:@list[0]
23             @:list[0]
24             }

4.使用html标记输出变量、文本
5.@{...}内部使用@:进行单行输出变量、文本,否则报错。

ASP.NET MVC 3 直到我膝盖中了一箭【3】Razor视图引擎

6.email和@符号
  大部分情况下,razor解析器都有足够的能力推导出模板里的一个“@”字符到底是在代码中用到,还是在静态文本内容中用到。razor会分析”@”字符右边的内容来判断它到底是代码还是静态文本内容(电子邮件被当作静态内容输出)。

1     @{
2         //输出@
3         @:&#64
4         //输出@
5         @:@@
6         //自动识别email输出
7         @:lhp0704@163.com
8                 }

 7.@url.content
将虚拟(相对)路径转换为应用程序绝对路径。如果指定的内容路径不以否定号 (~) 字符开头,此方法将返回没有改变的 contentpath。
1     <link href="@url.content("~/content/site.css")" rel="stylesheet" type="text/css" />
2     <script src="@url.content("~/scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
8.@rendersection()
  可以有选择性地定义几个不同的“节”,允许基于这个版面设计的视图模板通过“填入”自定义的内容来覆写它。这就允许你在视图中覆写版面设计页里不连续的内容段落,从而使你的站点版面设计更有弹性。
false表示具体页面可以不实现section head。
1     @*使用@rendersection方法预设一个区域,未来给继承该页的view使用*@
2     @rendersection("head", required: false)

1 @section head{
2     <script type="text/javascript">
3         $(function () {
4             alert("hello world");
5         });
6     </script>

9.@renderbody()
  使用“renderbody()”的辅助函数,放在模板中需要根据所请求的url而“填入”具体内容的地方。
~/views/shared/下_layout.cshtml
1         <p>
2             开始
3             @renderbody()
4             结束
5         </p>
 ~/views/home/下index.cshtml

1 @{
2     viewbag.title = "主页";
3 }
4 <p>
5      将内容放置在此处@renderbody()。
6 </p>


10.@renderpage()
~/views/shared/下_layout.cshtml

 1         <p>
 2             开始
 3             @renderbody()
 4             结束
 5             <br />
 6             开始
 7             @*可以多次使用*@
 8             @renderpage("~/views/home/about.cshtml")
 9             结束
10         </p>

~/views/home/下about.cshtml

1 @{
2     viewbag.title = "关于我们";
3 }
4 <p>
5      将内容放置在此处。
6 </p>


11.数据传递
viewdata获取或设置一个字典,其中包含在控制器和视图之间传递的数据。
viewbag获取视图包。
tempdata获取要传递到视图的临时数据。
 ~/views/home/下index.cshtml

1 @{
2     viewbag.title = "主页";
3 }
4 <p>
5      将内容放置在此处@renderbody()。
6 </p>

~/controllers/下homecontroller.cs

1         public actionresult index()
2         {
3             viewbag.message = "欢迎使用 asp.net mvc!";
4             viewdata["name1"] = "razor视图引擎1";
5             tempdata["name2"] = "razor视图引擎2";
6             return view();
7         }

~/views/shared/下_layout.cshtml

 1 <!doctype html>
 2 <html>
 3 <head>
 4     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 5     <title>@viewbag.title</title>
 6 </head>
 7 <body>
 8     <p>
 9         @renderbody()
10         @viewbag.message<br />
11         @viewdata["name1"]<br />
12         @tempdata["name2"]
13     </p>
14 </body>
15 </html>


 

 

 ASP.NET MVC 3 直到我膝盖中了一箭【3】Razor视图引擎

作者 依信依誉