原文:返璞归真 asp.net mvc (9) - asp.net mvc 3.0 新特性之 View(Razor)

[索引页]
[源码下载]

返璞归真 asp.net mvc (9) - asp.net mvc 3.0 新特性之 View(Razor)

作者:webabcd

介绍
asp.net mvc 之 asp.net mvc 3.0 新特性之 View(Razor):

  • Razor 的语法
  • Razor 与 Model
  • Razor 与布局

示例
1、Razor 概述
RazorDemoController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. using MVC30.Models;
  8.  
  9. namespace MVC30.Controllers
  10. {
  11. public class RazorDemoController : Controller
  12. {
  13. public ActionResult Summary()
  14. {
  15. return View();
  16. }
  17. }
  18. }

Summary.cshtml

  1. @{
  2. ViewBag.Title = "Razor 概述";
  3. }
  4.  
  5. <p>
  6. 使用 Razor 之前,要在 Web.Config 中做如下配置
  7. <br />
  8. <textarea rows="20" style="width: 100%">
  9. <configSections>
  10. <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
  11. <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  12. <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
  13. </sectionGroup>
  14. </configSections>
  15.  
  16. <system.web.webPages.razor>
  17. <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
  18. <pages pageBaseType="System.Web.Mvc.WebViewPage">
  19. <namespaces>
  20. <add namespace="System.Web.Mvc" />
  21. <add namespace="System.Web.Mvc.Ajax" />
  22. <add namespace="System.Web.Mvc.Html" />
  23. <add namespace="System.Web.Routing" />
  24. </namespaces>
  25. </pages>
  26. </system.web.webPages.razor>
  27. </textarea>
  28. </p>
  29.  
  30. <p>
  31. View 在每次 Render 之前都会先执行 _ViewStart.cshtml 中的代码
  32. </p>

2、Razor 语法简介
RazorDemoController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. using MVC30.Models;
  8.  
  9. namespace MVC30.Controllers
  10. {
  11. public class RazorDemoController : Controller
  12. {
  13. public ActionResult Syntax()
  14. {
  15. return View();
  16. }
  17. }
  18. }

Syntax.cshtml

  1. @{
  2. ViewBag.Title = "Razor 语法";
  3. }
  4.  
  5. <p>
  6. 使用@符号加{},直接在 html 页面中写 C#
  7. <br />
  8. @{ var currentTime = DateTime.Now; } @* 相当于 <% Htmlvar currentTime = DateTime.Now; %> *@
  9. @currentTime.ToString("yyyy-MM-dd")
  10. </p>
  11.  
  12. <p>
  13. 使用@符号,直接在 html 页面中写 C# 并输出结果
  14. <br />
  15. 当前 URL
  16. @Request.Url @* 相当于 <%= Request.Url %> *@
  17. <br />
  18. 当前 URL
  19. @{
  20. @Request.Url;
  21. }
  22. </p>
  23.  
  24. <p>
  25. 想输出字符@怎么办?,那就@@
  26. <br />
  27. webabcd@@abc.com
  28. </p>
  29.  
  30. <p>
  31. Razor 中写服务端注释(客户端不可见)
  32. @* code *@
  33. </p>
  34.  
  35. <p>
  36. Razor 自带的类型转换方法
  37. <br />
  38. 例:AsInt(), IsInt(), AsBool(), IsBool(), AsFloat(), IsFloat(), AsDecimal(), IsDecimal(), AsDateTime(), IsDateTime()
  39. <br />
  40. 类似 AsInt() 的方法会有一个重载方法 AsInt(int defaultValue),用于当转换失败时返回指定的默认值
  41. @{
  42. var tmp = "2/14/1980";
  43. var date = tmp.AsDateTime();
  44. }
  45. @date.ToString("yyyy-MM-dd")
  46. </p>
  47.  
  48. <p>
  49. 输出文本的方法
  50. <br />
  51. @*
  52. <text></text>
  53. 或者
  54. @:
  55. *@
  56. @{
  57. <text>我是文本</text>
  58. <br />
  59. @:我是文本
  60. }
  61. </p>
  62.  
  63. <p>
  64. 获取文件的 URL 绝对路径的方法,一般用于 img 标签,link 标签,a 标签中所引用的文件的完全 url 路径
  65. <br />
  66. <img alt="" src="@Href("~/Content/themes/base/images/ui-icons_888888_256x240.png")" />
  67. </p>
  68.  
  69. <p>
  70. Html Helper, Ajax Helper, Url Helper 依然可以使用
  71. <br />
  72. @Html.TextBox("txt", "我是 TextBox")
  73. </p>

3、Razor 的与 Model 相关的 Demo
User.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5.  
  6. namespace MVC30.Models
  7. {
  8. public class User
  9. {
  10. public int ID { get; set; }
  11.  
  12. public string Name { get; set; }
  13.  
  14. public string Password { get; set; }
  15.  
  16. public string ConfirmPassword { get; set; }
  17.  
  18. public DateTime DateOfBirth { get; set; }
  19.  
  20. public string Comment { get; set; }
  21. }
  22. }

RazorDemoController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. using MVC30.Models;
  8.  
  9. namespace MVC30.Controllers
  10. {
  11. public class RazorDemoController : Controller
  12. {
  13. // 用于演示 View 如何获取数据
  14. public ActionResult Model()
  15. {
  16. // ViewBag 的本质就是把 ViewData 包装成为 dynamic 类型
  17. ViewBag.Author = "webabcd";
  18.  
  19. var list = new List<User>()
  20. {
  21. new User { ID = , Name = "webabcd", DateOfBirth = new DateTime(, , ), Comment = "<b>mvp</b>" },
  22. new User { ID = , Name = "prettygyy", DateOfBirth = new DateTime(, , ), Comment = "<b>mvp</b>" }
  23. };
  24.  
  25. return View(list);
  26. }
  27. }
  28. }

_MyLayout_ParitalView.cshtml

  1. @*
  2. 通过 @model 指定 Model 的类型,同时 Model 对象就是 Html.Partial() Html.RenderPartial() 时传递过来的对象
  3. *@
  4.  
  5. @using MVC30.Models;
  6. @model User
  7.  
  8. <li>@Model.Name</li>

Model.cshtml

  1. @*
  2. 通过 @using 引入命名空间
  3. 通过 @model 指定 Model 的类型,同时 Model 对象就是 Action 返回的数据
  4. *@
  5.  
  6. @using MVC30.Models;
  7. @model List<User>
  8.  
  9. @{
  10. ViewBag.Title = "Razor 的与 Model 相关的 Demo";
  11. }
  12.  
  13. <p>
  14. <!--
  15. 演示 ViewBag 的用法
  16. -->
  17. Author: @ViewBag.Author
  18. </p>
  19.  
  20. <div>
  21. <ul>
  22. <!--
  23. Model 就是 Action 返回的数据
  24. -->
  25. @foreach (var user in Model)
  26. {
  27. if (@user.Name == "webabcd")
  28. {
  29. <!--
  30. 默认输出的是经过 HTML 编码后的数据,如果需要输出原始数据则使用 Html.Raw()
  31. -->
  32. <li>@user.Name (@Html.Raw(@user.Comment))</li>
  33. }
  34. else
  35. {
  36. <li>@user.Name (@user.Comment)</li>
  37. }
  38. }
  39. </ul>
  40. </div>
  41.  
  42. <!--
  43. Html.Partial Html.RenderPartial 的区别:
  44. Html.Partial - 直接将 View 的结果作为一个字符串输出
  45. Html.RenderPartial - View 作为一个用户控件嵌入到当前的 HttpContext
  46.  
  47. Html.Action Html.RenderAction 的区别(演示参见 ControllerDemo/ChildActionOnlyDemo.cshtml):
  48. Html.Action - 直接将 Action 的结果作为一个字符串输出
  49. Html.RenderAction - Action 作为一个用户控件嵌入到当前的 HttpContext
  50.  
  51. Html.Partial, Html.RenderPartial Html.Action, Html.RenderAction 的区别:
  52. 二者都需要指定 View,前者的 View 不需要 Action,而后者的 View 必须要有 Action
  53. -->
  54. <div>
  55. <ul>
  56. @foreach (var user in Model)
  57. {
  58. @Html.Partial("_MyLayout_ParitalView", user)
  59. @*
  60. <%= Html.Partial("_MyLayout_ParitalView", user) %>
  61. *@
  62. }
  63. </ul>
  64. </div>
  65.  
  66. <div>
  67. <ul>
  68. @{
  69. var firstUser = Model.First();
  70. Html.RenderPartial("_MyLayout_ParitalView", firstUser);
  71. @*
  72. <% Html.RenderPartial("_MyLayout_ParitalView", firstUser); %>
  73. *@
  74. }
  75. </ul>
  76. </div>

4、Razor 的与布局相关的 Demo
RazorDemoController.cs

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6.  
  7. using MVC30.Models;
  8.  
  9. namespace MVC30.Controllers
  10. {
  11. public class RazorDemoController : Controller
  12. {
  13. public ActionResult LayoutView()
  14. {
  15. return View();
  16. }
  17. }
  18. }

_ViewStart.cshtml

  1. @{
  2. // View 在每次 Render 之前都会先执行 _ViewStart.cshtml 中的代码
  3. Layout = "~/Views/Shared/_Layout.cshtml";
  4. }

_Layout.cshtml

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>@ViewBag.Title</title>
  5. <!--
  6. Url.Content() - 将指定的相对路径转换为绝对路径
  7. -->
  8. <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
  9. <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
  10. </head>
  11.  
  12. <body>
  13. @RenderBody()
  14. </body>
  15. </html>

_MyLayout_MasterPage.cshtml

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>@ViewBag.Title</title>
  5. </head>
  6. <body>
  7. <div style="background-color: Gray">
  8. <!--
  9. 引用此 Layout 的页上的未指明 Section 的内容会在此 Render
  10. -->
  11. @RenderBody()
  12. </div>
  13. @if (IsSectionDefined("mySection"))
  14. {
  15. // 引用此 Layout 的页后,如果指定名为 mySection 的 Section 的话,其会在此处 Render
  16. // 第二个参数的意思是,引用此 Layout 的页是否必须有名为 mySection 的 Section
  17. @RenderSection("mySection", false)
  18. }
  19. else
  20. {
  21. @:没有 mySection
  22. }
  23. </body>
  24. </html>

_MyLayout_RenderPage.cshtml

  1. <h1>
  2. RenderPage
  3. <br />
  4. @{
  5. // 获取 RenderPage() 传递过来的参数
  6. if (@PageData["param"] == "abc")
  7. {
  8. @:param == "abc"
  9. }
  10. if (@PageData["param2"] == "xyz")
  11. {
  12. @:param == "xyz"
  13. }
  14. }
  15. </h1>

LayoutView.cshtml

  1. @{
  2. // 指定一个 Layout 页(相当于母版页)
  3. Layout = "_MyLayout_MasterPage.cshtml";
  4. ViewBag.Title = "Razor 的与布局相关的 Demo";
  5. }
  6.  
  7. <!--
  8. Layout 中的 RenderBody() 中显示
  9. RenderPage() 的第二个参数的意思:给 _MyLayout_RenderPage.cshtml 传递参数
  10. -->
  11. RenderBody() 中显示的内容
  12. @RenderPage("~/Views/RazorDemo/_MyLayout_RenderPage.cshtml", new { param = "abc", param2 = "xyz"})
  13.  
  14. <!--
  15. Layout 中的 RenderSection("mySection") 中显示
  16. -->
  17. @section mySection {
  18. <b>My Section</b>
  19. }

5、其他

  1. <p>
  2. Razor 的 dll 在这里 C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
  3. </p>
  4. <p>
  5. Razor 中约定:布局 View 或者需要被别的 View 引用的 View 要以“_”开头
  6. </p>
  7. <p>
  8. asp.net mvc 3.0 的 T4 模板的位置在 D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates
  9. <br />
  10. 如果不想修改默认模板的话,那么就将模板安装到当前项目中,然后只修改当前项目的 T4 模板,方法如下:
  11. <br />
  12. Tools -> Library Package Manager -> Package Manager Console,然后输入 install-package mvc3codetemplatescsharp,之后 CodeTemplates 文件夹就会添加到当前项目中
  13. </p>
  14. <p>
  15. 新增的 HTML Helper,例如:Chart, WebGrid, WebImage, WebMail, Crypto 等,详见 System.Web.Helpers.dll
  16. </p>

OK
[源码下载]

返璞归真 asp.net mvc (9) - asp.net mvc 3.0 新特性之 View(Razor)的更多相关文章

  1. 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性

    [索引页][源码下载] 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 5.0 新 ...

  2. 返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller

    原文:返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller [索引页][源码下载] 返璞归真 asp.net mvc (7) - asp.net ...

  3. 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model

    原文:返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model [索引页][源码下载] 返璞归真 asp.net mvc (8) - asp.net mvc ...

  4. 返璞归真 asp.net mvc (12) - asp.net mvc 4.0 新特性之移动特性

    原文:返璞归真 asp.net mvc (12) - asp.net mvc 4.0 新特性之移动特性 [索引页][源码下载] 返璞归真 asp.net mvc (12) - asp.net mvc ...

  5. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  6. 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API

    原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API [索引页][源码下载] 返璞归真 asp.net mvc (10) - asp.net ...

  7. 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性

    原文:返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 [索引页][源码下载] 返璞归真 asp.net mvc (6) - asp.net mvc 2.0 新特性 ...

  8. asp.net mvc 4.0 新特性之移动特性

    asp.net mvc 4.0 新特性之移动特性 为不同的客户端提供不同的视图 手动重写 UserAgent,从而强制使用对应的视图 示例1.演示如何为不同的客户端提供不同的视图Global.asax ...

  9. ASP.NET4.0新特性

    原文:ASP.NET4.0新特性 在以前试用VS2010的时候已经关注到它在Web开发支持上的一些变化了,为此我还专门做了一个ppt,当初是计划在4月12日那天讲的,结果因为莫名其妙的原因导致没有语音 ...

随机推荐

  1. 无向图的最短路径算法JAVA实现(转)

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

  2. C++&&Mysql&&codeblocks

    #include <iostream> #include <stdio.h> #include <winsock2.h> #include <mysql.h& ...

  3. 应用层open(read、write、close)怎样调用驱动open(read、write、close)函数的?

    应用层open(read.write.close)怎样调用驱动open(read.write.close)函数的? 华清远见2014-09-29   北京海淀区 张俊浩 三大数据结构关系图

  4. mysql相关日志汇总

    日志作为重要的查询问题的手段.所以尽量记录上自己须要的日志.以供自己查询一些问题. MySQL有下面几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-q ...

  5. poj-2195-Going Home最小费用最大流

    重新切一遍最小费用最大流~~~ 这到题目的数据范围有问题,尽量开大就好了~~ #include<stdio.h> #include<iostream> #include< ...

  6. like-minded 都有什么意思_百度知道

    like-minded 都有什么意思_百度知道 like-minded 都有什么意思

  7. 别样JAVA学习(五)继承上(1.0)Object类equals()

    上一节继承下(一)我们进行抽象类.接口以及多态的学习. 接下来大家我们讲点特殊的东西就是object类, 我们一直在说继承,子继承了父,父还有没有父类呢, 为什么这么思考,大家想构造函数的第一行是不是 ...

  8. J2EE互联网产品打造

    CSDN的各位技术朋友们,你们好: 我司最近正在研发一套J2EE的互联网产品,前期功能设计例如以下: 1.权限管理 2.菜单管理 3.系统设置 4.页面管理[主要做静态化] 5.任务管理[数据同步以及 ...

  9. solr4.9r+ Eclipse 4.3+ tomcat 7.5 +winds7(二)

    尊重原创,原文地址:http://blog.csdn.net/chunlei_zhang/article/details/38778945 这另外一种方法是将solr项目部署到tomcat上,执行to ...

  10. 30第二建筑Github Page

    从我原来博客的前端传输.链接:http://www.hacke2.cn/create-github-page/ 假设中国每一个程序猿都写博客,那么中国IT届的春天就来了 有同学问我的站点是怎么创建的, ...