博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
返璞归真 asp.net mvc (9) - asp.net mvc 3.0 新特性之 View(Razor)
阅读量:5266 次
发布时间:2019-06-14

本文共 7905 字,大约阅读时间需要 26 分钟。

原文:

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

作者:
介绍
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 概述";}

使用 Razor 之前,要在 Web.Config 中做如下配置

View 在每次 Render 之前都会先执行 _ViewStart.cshtml 中的代码

 

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 语法";}

使用@符号加{},直接在 html 页面中写 C#

@{ var currentTime = DateTime.Now; } @* 相当于 <% Htmlvar currentTime = DateTime.Now; %> *@ @currentTime.ToString("yyyy-MM-dd")

使用@符号,直接在 html 页面中写 C# 并输出结果

当前 URL: @Request.Url @* 相当于 <%= Request.Url %> *@
当前 URL: @{ @Request.Url; }

想输出字符@怎么办?,那就@@

webabcd@@abc.com

在 Razor 中写服务端注释(客户端不可见) @* code *@

Razor 自带的类型转换方法

例:AsInt(), IsInt(), AsBool(), IsBool(), AsFloat(), IsFloat(), AsDecimal(), IsDecimal(), AsDateTime(), IsDateTime()
类似 AsInt() 的方法会有一个重载方法 AsInt(int defaultValue),用于当转换失败时返回指定的默认值 @{ var tmp = "2/14/1980"; var date = tmp.AsDateTime(); } @date.ToString("yyyy-MM-dd")

输出文本的方法

@*
或者 @: *@ @{
我是文本
@:我是文本 }

获取文件的 URL 绝对路径的方法,一般用于 img 标签,link 标签,a 标签中所引用的文件的完全 url 路径

Html Helper, Ajax Helper, Url Helper 依然可以使用

@Html.TextBox("txt", "我是 TextBox")

 

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
() { new User { ID = 1, Name = "webabcd", DateOfBirth = new DateTime(1980, 2, 14), Comment = "
mvp" }, new User { ID = 2, Name = "prettygyy", DateOfBirth = new DateTime(1981, 6, 26), Comment = "
mvp" } }; return View(list); } }}

 

_MyLayout_ParitalView.cshtml

@*    通过 @model 指定 Model 的类型,同时 Model 对象就是 Html.Partial() 或 Html.RenderPartial() 时传递过来的对象*@@using MVC30.Models;@model User           
  • @Model.Name
  •  

    Model.cshtml

    @*    通过 @using 引入命名空间    通过 @model 指定 Model 的类型,同时 Model 对象就是 Action 返回的数据*@@using MVC30.Models;@model List
    @{ ViewBag.Title = "Razor 的与 Model 相关的 Demo";}

    Author: @ViewBag.Author

      @foreach (var user in Model) { if (@user.Name == "webabcd") {
    • @user.Name (@Html.Raw(@user.Comment))
    • } else {
    • @user.Name (@user.Comment)
    • } }
      @foreach (var user in Model) { @Html.Partial("_MyLayout_ParitalView", user) @* <%= Html.Partial("_MyLayout_ParitalView", user) %> *@ }
      @{ var firstUser = Model.First(); Html.RenderPartial("_MyLayout_ParitalView", firstUser); @* <% Html.RenderPartial("_MyLayout_ParitalView", firstUser); %> *@ }

     

    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

        @ViewBag.Title    
    @RenderBody()

     

    _MyLayout_MasterPage.cshtml

        @ViewBag.Title    
    @RenderBody()
    @if (IsSectionDefined("mySection")) { // 引用此 Layout 的页后,如果指定名为 mySection 的 Section 的话,其会在此处 Render // 第二个参数的意思是,引用此 Layout 的页是否必须有名为 mySection 的 Section @RenderSection("mySection", false) } else { @:没有 mySection }

     

    _MyLayout_RenderPage.cshtml

    RenderPage
    @{ // 获取 RenderPage() 传递过来的参数 if (@PageData["param"] == "abc") { @:param == "abc" } if (@PageData["param2"] == "xyz") { @:param == "xyz" } }

     

    LayoutView.cshtml

    @{    // 指定一个 Layout 页(相当于母版页)    Layout = "_MyLayout_MasterPage.cshtml";     ViewBag.Title = "Razor 的与布局相关的 Demo";}
    在 RenderBody() 中显示的内容@RenderPage("~/Views/RazorDemo/_MyLayout_RenderPage.cshtml", new { param = "abc", param2 = "xyz"})
    @section mySection { My Section }

     

    5、其他

    Razor 的 dll 在这里 C:\Program Files\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies

    Razor 中约定:布局 View 或者需要被别的 View 引用的 View 要以“_”开头

    asp.net mvc 3.0 的 T4 模板的位置在 D:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates

    如果不想修改默认模板的话,那么就将模板安装到当前项目中,然后只修改当前项目的 T4 模板,方法如下:
    Tools -> Library Package Manager -> Package Manager Console,然后输入 install-package mvc3codetemplatescsharp,之后 CodeTemplates 文件夹就会添加到当前项目中

    新增的 HTML Helper,例如:Chart, WebGrid, WebImage, WebMail, Crypto 等,详见 System.Web.Helpers.dll

     

    OK

    posted on
    2014-03-09 17:44 阅读(
    ...) 评论(
    ...)

    转载于:https://www.cnblogs.com/lonelyxmas/p/3590289.html

    你可能感兴趣的文章
    Python 数据类型
    查看>>
    S5PV210根文件系统的制作(一)
    查看>>
    centos下同时启动多个tomcat
    查看>>
    slab分配器
    查看>>
    【读书笔记】C#高级编程 第三章 对象和类型
    查看>>
    针对sl的ICSharpCode.SharpZipLib,只保留zip,gzip的流压缩、解压缩功能
    查看>>
    【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
    查看>>
    【SVM】libsvm-python
    查看>>
    Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
    查看>>
    Leetcode Balanced Binary Tree
    查看>>
    九.python面向对象(双下方法内置方法)
    查看>>
    go:channel(未完)
    查看>>
    [JS]递归对象或数组
    查看>>
    LeetCode(17) - Letter Combinations of a Phone Number
    查看>>
    Linux查找命令对比(find、locate、whereis、which、type、grep)
    查看>>
    路由器外接硬盘做nas可行吗?
    查看>>
    python:从迭代器,到生成器,再到协程的示例代码
    查看>>
    Java多线程系列——原子类的实现(CAS算法)
    查看>>
    多线程《三》进程与线程的区别
    查看>>
    linux sed命令
    查看>>