返璞归真 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
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MVC30.Models;
- namespace MVC30.Controllers
- {
- public class RazorDemoController : Controller
- {
- public ActionResult Summary()
- {
- return View();
- }
- }
- }
Summary.cshtml
- @{
- ViewBag.Title = "Razor 概述";
- }
- <p>
- 使用 Razor 之前,要在 Web.Config 中做如下配置
- <br />
- <textarea rows="20" style="width: 100%">
- <configSections>
- <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">
- <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" />
- <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" />
- </sectionGroup>
- </configSections>
- <system.web.webPages.razor>
- <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
- <pages pageBaseType="System.Web.Mvc.WebViewPage">
- <namespaces>
- <add namespace="System.Web.Mvc" />
- <add namespace="System.Web.Mvc.Ajax" />
- <add namespace="System.Web.Mvc.Html" />
- <add namespace="System.Web.Routing" />
- </namespaces>
- </pages>
- </system.web.webPages.razor>
- </textarea>
- </p>
- <p>
- View 在每次 Render 之前都会先执行 _ViewStart.cshtml 中的代码
- </p>
2、Razor 语法简介
RazorDemoController.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MVC30.Models;
- namespace MVC30.Controllers
- {
- public class RazorDemoController : Controller
- {
- public ActionResult Syntax()
- {
- return View();
- }
- }
- }
Syntax.cshtml
- @{
- ViewBag.Title = "Razor 语法";
- }
- <p>
- 使用@符号加{},直接在 html 页面中写 C#
- <br />
- @{ var currentTime = DateTime.Now; } @* 相当于 <% Htmlvar currentTime = DateTime.Now; %> *@
- @currentTime.ToString("yyyy-MM-dd")
- </p>
- <p>
- 使用@符号,直接在 html 页面中写 C# 并输出结果
- <br />
- 当前 URL:
- @Request.Url @* 相当于 <%= Request.Url %> *@
- <br />
- 当前 URL:
- @{
- @Request.Url;
- }
- </p>
- <p>
- 想输出字符@怎么办?,那就@@
- <br />
- webabcd@@abc.com
- </p>
- <p>
- 在 Razor 中写服务端注释(客户端不可见)
- @* code *@
- </p>
- <p>
- Razor 自带的类型转换方法
- <br />
- 例:AsInt(), IsInt(), AsBool(), IsBool(), AsFloat(), IsFloat(), AsDecimal(), IsDecimal(), AsDateTime(), IsDateTime()
- <br />
- 类似 AsInt() 的方法会有一个重载方法 AsInt(int defaultValue),用于当转换失败时返回指定的默认值
- @{
- var tmp = "2/14/1980";
- var date = tmp.AsDateTime();
- }
- @date.ToString("yyyy-MM-dd")
- </p>
- <p>
- 输出文本的方法
- <br />
- @*
- <text></text>
- 或者
- @:
- *@
- @{
- <text>我是文本</text>
- <br />
- @:我是文本
- }
- </p>
- <p>
- 获取文件的 URL 绝对路径的方法,一般用于 img 标签,link 标签,a 标签中所引用的文件的完全 url 路径
- <br />
- <img alt="" src="@Href("~/Content/themes/base/images/ui-icons_888888_256x240.png")" />
- </p>
- <p>
- Html Helper, Ajax Helper, Url Helper 依然可以使用
- <br />
- @Html.TextBox("txt", "我是 TextBox")
- </p>
3、Razor 的与 Model 相关的 Demo
User.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace MVC30.Models
- {
- public class User
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public string Password { get; set; }
- public string ConfirmPassword { get; set; }
- public DateTime DateOfBirth { get; set; }
- public string Comment { get; set; }
- }
- }
RazorDemoController.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MVC30.Models;
- namespace MVC30.Controllers
- {
- public class RazorDemoController : Controller
- {
- // 用于演示 View 如何获取数据
- public ActionResult Model()
- {
- // ViewBag 的本质就是把 ViewData 包装成为 dynamic 类型
- ViewBag.Author = "webabcd";
- var list = new List<User>()
- {
- new User { ID = , Name = "webabcd", DateOfBirth = new DateTime(, , ), Comment = "<b>mvp</b>" },
- new User { ID = , Name = "prettygyy", DateOfBirth = new DateTime(, , ), Comment = "<b>mvp</b>" }
- };
- return View(list);
- }
- }
- }
_MyLayout_ParitalView.cshtml
- @*
- 通过 @model 指定 Model 的类型,同时 Model 对象就是 Html.Partial() 或 Html.RenderPartial() 时传递过来的对象
- *@
- @using MVC30.Models;
- @model User
- <li>@Model.Name</li>
Model.cshtml
- @*
- 通过 @using 引入命名空间
- 通过 @model 指定 Model 的类型,同时 Model 对象就是 Action 返回的数据
- *@
- @using MVC30.Models;
- @model List<User>
- @{
- ViewBag.Title = "Razor 的与 Model 相关的 Demo";
- }
- <p>
- <!--
- 演示 ViewBag 的用法
- -->
- Author: @ViewBag.Author
- </p>
- <div>
- <ul>
- <!--
- Model 就是 Action 返回的数据
- -->
- @foreach (var user in Model)
- {
- if (@user.Name == "webabcd")
- {
- <!--
- 默认输出的是经过 HTML 编码后的数据,如果需要输出原始数据则使用 Html.Raw()
- -->
- <li>@user.Name (@Html.Raw(@user.Comment))</li>
- }
- else
- {
- <li>@user.Name (@user.Comment)</li>
- }
- }
- </ul>
- </div>
- <!--
- Html.Partial 与 Html.RenderPartial 的区别:
- Html.Partial - 直接将 View 的结果作为一个字符串输出
- Html.RenderPartial - 将 View 作为一个用户控件嵌入到当前的 HttpContext 中
- Html.Action 与 Html.RenderAction 的区别(演示参见 ControllerDemo/ChildActionOnlyDemo.cshtml):
- Html.Action - 直接将 Action 的结果作为一个字符串输出
- Html.RenderAction - 将 Action 作为一个用户控件嵌入到当前的 HttpContext 中
- Html.Partial, Html.RenderPartial 与 Html.Action, Html.RenderAction 的区别:
- 二者都需要指定 View,前者的 View 不需要 Action,而后者的 View 必须要有 Action
- -->
- <div>
- <ul>
- @foreach (var user in Model)
- {
- @Html.Partial("_MyLayout_ParitalView", user)
- @*
- <%= Html.Partial("_MyLayout_ParitalView", user) %>
- *@
- }
- </ul>
- </div>
- <div>
- <ul>
- @{
- var firstUser = Model.First();
- Html.RenderPartial("_MyLayout_ParitalView", firstUser);
- @*
- <% Html.RenderPartial("_MyLayout_ParitalView", firstUser); %>
- *@
- }
- </ul>
- </div>
4、Razor 的与布局相关的 Demo
RazorDemoController.cs
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using MVC30.Models;
- namespace MVC30.Controllers
- {
- public class RazorDemoController : Controller
- {
- public ActionResult LayoutView()
- {
- return View();
- }
- }
- }
_ViewStart.cshtml
- @{
- // View 在每次 Render 之前都会先执行 _ViewStart.cshtml 中的代码
- Layout = "~/Views/Shared/_Layout.cshtml";
- }
_Layout.cshtml
- <!DOCTYPE html>
- <html>
- <head>
- <title>@ViewBag.Title</title>
- <!--
- Url.Content() - 将指定的相对路径转换为绝对路径
- -->
- <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>
- </head>
- <body>
- @RenderBody()
- </body>
- </html>
_MyLayout_MasterPage.cshtml
- <!DOCTYPE html>
- <html>
- <head>
- <title>@ViewBag.Title</title>
- </head>
- <body>
- <div style="background-color: Gray">
- <!--
- 引用此 Layout 的页上的未指明 Section 的内容会在此 Render
- -->
- @RenderBody()
- </div>
- @if (IsSectionDefined("mySection"))
- {
- // 引用此 Layout 的页后,如果指定名为 mySection 的 Section 的话,其会在此处 Render
- // 第二个参数的意思是,引用此 Layout 的页是否必须有名为 mySection 的 Section
- @RenderSection("mySection", false)
- }
- else
- {
- @:没有 mySection
- }
- </body>
- </html>
_MyLayout_RenderPage.cshtml
- <h1>
- RenderPage
- <br />
- @{
- // 获取 RenderPage() 传递过来的参数
- if (@PageData["param"] == "abc")
- {
- @:param == "abc"
- }
- if (@PageData["param2"] == "xyz")
- {
- @:param == "xyz"
- }
- }
- </h1>
LayoutView.cshtml
- @{
- // 指定一个 Layout 页(相当于母版页)
- Layout = "_MyLayout_MasterPage.cshtml";
- ViewBag.Title = "Razor 的与布局相关的 Demo";
- }
- <!--
- 在 Layout 中的 RenderBody() 中显示
- RenderPage() 的第二个参数的意思:给 _MyLayout_RenderPage.cshtml 传递参数
- -->
- 在 RenderBody() 中显示的内容
- @RenderPage("~/Views/RazorDemo/_MyLayout_RenderPage.cshtml", new { param = "abc", param2 = "xyz"})
- <!--
- 在 Layout 中的 RenderSection("mySection") 中显示
- -->
- @section mySection {
- <b>My Section</b>
- }
5、其他
- <p>
- Razor 的 dll 在这里 C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
- </p>
- <p>
- Razor 中约定:布局 View 或者需要被别的 View 引用的 View 要以“_”开头
- </p>
- <p>
- asp.net mvc 3.0 的 T4 模板的位置在 D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates
- <br />
- 如果不想修改默认模板的话,那么就将模板安装到当前项目中,然后只修改当前项目的 T4 模板,方法如下:
- <br />
- Tools -> Library Package Manager -> Package Manager Console,然后输入 install-package mvc3codetemplatescsharp,之后 CodeTemplates 文件夹就会添加到当前项目中
- </p>
- <p>
- 新增的 HTML Helper,例如:Chart, WebGrid, WebImage, WebMail, Crypto 等,详见 System.Web.Helpers.dll
- </p>
OK
[源码下载]
返璞归真 asp.net mvc (9) - asp.net mvc 3.0 新特性之 View(Razor)的更多相关文章
- 返璞归真 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 新 ...
- 返璞归真 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 ...
- 返璞归真 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 ...
- 返璞归真 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 ...
- 返璞归真 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 上传文件, ...
- 返璞归真 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 ...
- 返璞归真 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 新特性 ...
- asp.net mvc 4.0 新特性之移动特性
asp.net mvc 4.0 新特性之移动特性 为不同的客户端提供不同的视图 手动重写 UserAgent,从而强制使用对应的视图 示例1.演示如何为不同的客户端提供不同的视图Global.asax ...
- ASP.NET4.0新特性
原文:ASP.NET4.0新特性 在以前试用VS2010的时候已经关注到它在Web开发支持上的一些变化了,为此我还专门做了一个ppt,当初是计划在4月12日那天讲的,结果因为莫名其妙的原因导致没有语音 ...
随机推荐
- 无向图的最短路径算法JAVA实现(转)
一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...
- C++&&Mysql&&codeblocks
#include <iostream> #include <stdio.h> #include <winsock2.h> #include <mysql.h& ...
- 应用层open(read、write、close)怎样调用驱动open(read、write、close)函数的?
应用层open(read.write.close)怎样调用驱动open(read.write.close)函数的? 华清远见2014-09-29 北京海淀区 张俊浩 三大数据结构关系图
- mysql相关日志汇总
日志作为重要的查询问题的手段.所以尽量记录上自己须要的日志.以供自己查询一些问题. MySQL有下面几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-q ...
- poj-2195-Going Home最小费用最大流
重新切一遍最小费用最大流~~~ 这到题目的数据范围有问题,尽量开大就好了~~ #include<stdio.h> #include<iostream> #include< ...
- like-minded 都有什么意思_百度知道
like-minded 都有什么意思_百度知道 like-minded 都有什么意思
- 别样JAVA学习(五)继承上(1.0)Object类equals()
上一节继承下(一)我们进行抽象类.接口以及多态的学习. 接下来大家我们讲点特殊的东西就是object类, 我们一直在说继承,子继承了父,父还有没有父类呢, 为什么这么思考,大家想构造函数的第一行是不是 ...
- J2EE互联网产品打造
CSDN的各位技术朋友们,你们好: 我司最近正在研发一套J2EE的互联网产品,前期功能设计例如以下: 1.权限管理 2.菜单管理 3.系统设置 4.页面管理[主要做静态化] 5.任务管理[数据同步以及 ...
- solr4.9r+ Eclipse 4.3+ tomcat 7.5 +winds7(二)
尊重原创,原文地址:http://blog.csdn.net/chunlei_zhang/article/details/38778945 这另外一种方法是将solr项目部署到tomcat上,执行to ...
- 30第二建筑Github Page
从我原来博客的前端传输.链接:http://www.hacke2.cn/create-github-page/ 假设中国每一个程序猿都写博客,那么中国IT届的春天就来了 有同学问我的站点是怎么创建的, ...