《精通MVC5.0》chapter5笔记-Razor语法

1.1.视图声明数据类型

Razor声明都是@开始,例如@model MVC.Models.Product声明了控制器创给视图的数据类型,这样就可以在视图使用@Modle.property访问数据,如下@Model.Name,注意此处Model首字母大写,声明数据类型model首字母小写

@model MVC.Models.Product

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
        @Model.Name
    </div>
</body>
</html>
对应的控制器方法:
 public class HomeController : Controller
    {
        public Product MyProduct = new Product()
        {
            ProductID = 1,
            Name = "Kayak",
            Description = "A boat for one person",
            Category = "Watersports",
            Price = 275M
        };
        // GET: Home
        public ActionResult Index()
        {
            return View(MyProduct);
        }
    }

1.2.视图模板设置

模板文件命名约定_开头,例如_BasicLayout.cshtml

@RenderBody

@model MVC.Models.Product

@{
    ViewBag.Title = "Product Name";
    Layout = "~/Views/_BasicLayout.cshtml";
}

@Model.Name

1.3.使用ViewStart文件

如果每个视图页面都使用到了同一个模板文件,那么是否每个视图页面都要设置一次Layout = "....."岂不是很麻烦。使用_ViewStart.cshtml可以指定默认模板可以解决,如下_ViewStart.cshtml

@{
    Layout = "~/Views/_BasicLayout.cshtml";
}

此时Index.cshtml页面就不用指定模板,默认模板使用_BasicLayout.cshtml

@model MVC.Models.Product

@{
    ViewBag.Title = "Product Name";
}

@Model.Name

1.4.使用Razor Expressions

控制器方法应该做的是传一个数据对象或对象集合给对应视图,而不是确切的数据。记住传给视图的数据是对应数据类型一个对象或对象集合。假如有个视图页面Price.cshtml用于展示价格,此时对应的控制器方法应该是return View(myProduct),而不是return View(myProduct.Price),然后在视图页面再用Razor @Model 表达式获取确切数据,例如

The Product name is @Model.Name,and it costs $@Model.Price

1.5.使用ViewBag传数据给视图

//控制器方法

        public ActionResult DemoViewBag()
        {
            ViewBag.ProductCount = 1;
            ViewBag.ExpressShip = true;
            ViewBag.ApplyDiscount = false;
            ViewBag.Supplier = null;
            return View(MyProduct);
        }

//对应视图
@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}

<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><td>Name</td><td>@Model.Name</td></tr>
        <tr><td>Price</td><td>@Model.Price</td></tr>
        <tr><td>Stock Level</td><td>@ViewBag.ProductCount</td></tr>
    </tbody>
</table>

1.6.控制器传的数据作为属性值

//控制器方法
public ActionResult DemoViewBag()
        {
            ViewBag.ProductCount = 1;
            ViewBag.ExpressShip = true;
            ViewBag.ApplyDiscount = false;
            ViewBag.Supplier = null;
            return View(MyProduct);
        }
//对应视图
@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}

<div data-discount="@ViewBag.ApplyDiscount" express="@ViewBag.ExpressShip" data-supplier="@ViewBag.Supplier">
    The containing element has data attributes
</div>
Discount1:<input type="checkbox" checked="@ViewBag.ApplyDiscount"/>
Discount2:<input type="checkbox" checked="@Model.isDiscount"/>
Express:<input type="checkbox" checked="@ViewBag.ExpressShip"/>

1.7.Razor条件表达式

条件表达式以@开始,}结束

在视图中插入纯文本,且没有被html标签包围,需要@:前缀,例如@:Out of Stock

@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}
<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><td>Name</td><td>@Model.Name</td></tr>
        <tr><td>Price</td><td>@Model.Price</td></tr>
        <tr><td>Stock Level</td>
            <td>
                @switch ((int)ViewBag.ProductCount)
                {
                    case 0:
                        @:out of Stock
                        break;
                    case 1:
                        <b>Low Stock(@ViewBag.ProductCount)</b>
                        break;
                    default:
                        @ViewBag.ProductCount
                        break;
                }
            </td>
        </tr>
    </tbody>
</table>
@model MVC.Models.Product

@{
    ViewBag.Title = "DemoViewBag";
}
<table>
    <thead>
        <tr><th>Property</th><th>Value</th></tr>
    </thead>
    <tbody>
        <tr><td>Name</td><td>@Model.Name</td></tr>
        <tr><td>Price</td><td>@Model.Price</td></tr>
        <tr><td>Stock Level</td>
            <td>
                @if (ViewBag.ProductCount==0)
                {
                    @:Out of Stoc
                }
                else if (ViewBag.ProductCount == 1)
                {
                    <b>Low Stock(@ViewBag.ProductCount)</b>
                }else
                {
                    @ViewBag.ProductCount

                }
            </td>
        </tr>
    </tbody>
</table>

1.8.Razor遍历数组和集合

注意:在视图页面引入命名空间与后台代码一样:@using 命名空间

//控制器方法
public ActionResult DemArray()
        {
            Product[] array = {
                new Product() { Name = "kaya",Price=275M },
                new Product() { Name="Lifejacket",Price=48.95M},
                new Product() { Name="Soccer ball",Price=19.50M},
                new Product() { Name="Corner flag",Price=34.95M},
            };
            return View(array);
        }
//对应视图
@model MVC.Models.Product[]
@using MVC.Models
@{
    ViewBag.Title = "DemArray";
    Layout = "~/Views/_BasicLayout.cshtml";
}

<h2>DemArray</h2>
@if (Model.Length > 0)
{
    <table>
        <thead><tr><th>Product</th><th>Price</th></tr></thead>
        <tbody>
            @foreach (Product p in Model)
            {
                <tr>
                    <td>@p.Name</td>
                    <td>[email protected]</td>
                </tr>
            }
        </tbody>
    </table>
}
时间: 2024-07-31 02:55:03

《精通MVC5.0》chapter5笔记-Razor语法的相关文章

Asp.net MVC]Asp.net MVC5系列——Razor语法

目录 概念 Razor语法 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列--添加视图 [Asp.net MVC]Asp.net MVC5系列--添加模型 [Asp.net MVC]Asp.net MVC5系列--从控制器访问模型中的数据 [Asp.net MVC]Asp.net MVC5系列--添加数据 [Asp.net MVC]Asp.net MVC5系列--在模型中添加验证规则 [Asp.net

ASP.NET MVC 学习笔记-2.Razor语法

1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“:”结尾.代码块中定义的变量可能会被同一个域中的其他块使用.比如,定义在视图顶部的变量可以被同一视图中的代码块和代码段访问. 3.         布局 Razor通过layouts保持网页外观布局的一致性.布局模板包含基本的标签,并可以指定渲染视图内容的位置.比如 基本布局文件(_Layout.cshtml) <!DOCTYPE Html> <ht

Effective Objective-C 2.0重读笔记---1

上次看这本书的时候匆匆走了一遍,最近不太忙,重温了一遍,把笔记写出来~.. 有兴趣的可以去买一本,感觉这本书还是挺不错的 由于大部分是在坐车的时候用手机写的,所以代码很少,图也很少 1. 尽量使用向前声明,延后引入头文件的时间,这样可以减少编译时间2. 使用arraywithobjects:....如果遇到为空的变量,就会自动终止,后面的变量便会添加不上,切不会报错,会造成数据不一致问题,所以尽量使用字面量语法创建相关对象,减少出错且减少代码量3. 使用字面量创建的对象都是不可变的,如果要获得可

Razor 语法

Razor 语法 原文:Razor Syntax Reference作者:Taylor Mullen.Rick Anderson翻译:刘怡(AlexLEWIS)校对:何镇汐 什么是 Razor? Razor 是一种基于服务器端代码的可以转换为网页的标记语法.Razor 语法包括 Razor 标记.C# 和 HTML 组成.包含 Razor 的文件通常后缀名为 .cshtml . 渲染 HTML Razor 的默认语言是 HTML.从 Razor 渲染为 HTML 和直接一个 HTML 文件没啥区

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

MVC3/4/5/6 布局页及Razor语法

一.目录结构 二.Razor语法 代码块:@{},如:@{Html.Raw(“”);} @if(){} @switch(){} @for(){} @foreach(){} @while(){} @do{}while(){} 代码块内语句以分号结束 表达式或变量:以@开始,如:@User.Name或@(User.Name + “欢迎你”),@() 变量可以通过var来声明,且只能在代码块中,如:@{var abc=”aaa”;} 方法调用:以@开始,如:@Html.Encode(“”) 单行文本输

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记

编写高质量的iOS代码--Effective Objective-C 2.0 读书笔记 这本书年初刷完,感觉不错,介绍了很多小点,都是平日不怎么关注的. 第1章 熟悉Objective-C 这章没什么好介绍 第1条:了解Objective-C语言的起源 第2条:在类的头文件中尽量少引入其他头文件 第3条:多用字面量语法,少用与之等价的方法 第4条:多用类型常量,少用#define预处理指令 要理解为啥要少用#define预处理指令. 然后具体用哪个, 自己定吧 第5条:用枚举表示状态.选项.状态

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

Asp.net MVC3 Razor语法小记

Asp.net MVC3 Razor语法小记 1.在MVC View中使用 三元运算符的方式:@(bool?"":"") 2.在@{}中输出一行:@:<html>.如果这一行的上下文在程序代码中则用:@Html.Raw(string.Format(""));而不是Html.Raw(); 3.Radio默认选中: @Html.RadioButtonFor(m => m.BookType, 0, new { @checked=&qu