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 = ,
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 = ;
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 :
@:out of Stock
break;
case :
<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==)
{
@:Out of Stoc
}
else if (ViewBag.ProductCount == )
{
<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 > )
{
<table>
<thead><tr><th>Product</th><th>Price</th></tr></thead>
<tbody>
@foreach (Product p in Model)
{
<tr>
<td>@p.Name</td>
<td>$@p.Price</td>
</tr>
}
</tbody>
</table>
}

《精通MVC5.0》笔记Razor的更多相关文章

  1. 《精通MVC5.0》路由笔记

    MVC使用路由系统处理请求的URL.路由系统主要功能 检查请求的URL,并理解该URL对应的控制器和方法 生成URL地址 在MVC程序中有两种方式创建路由:convention-based routi ...

  2. Asp.net core 2.0.1 Razor 的使用学习笔记(五)

    按说这里应该写关于Role角色类的笔记,但是我还没时间实验这块,所以等以后我搞定了再来分享.现在先写其他部分. Asp.net core 2.0.1 Razor 的使用学习笔记——建立模型 按照微软官 ...

  3. Asp.net core 2.0.1 Razor 的使用学习笔记(六)

    Asp.net core 2.0.1 Razor 的使用学习笔记——基本页面的建立 VS这版(vs版本:15.5.6  .net版本:4.7.02558)的Razor页面自动生成就是坑爹货,它自动生成 ...

  4. ASP.NET Identity 2集成到MVC5项目--笔记01

    Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...

  5. ASP.NET Identity 2集成到MVC5项目--笔记02

    ASP.NET Identity 2集成到MVC5项目--笔记01 ASP.NET Identity 2集成到MVC5项目--笔记02 继上一篇,本篇主要是实现邮件.用户名登陆和登陆前邮件认证. 1. ...

  6. 《ASP.NET4从入门到精通》学习笔记2

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/dongdongdongJL/article/details/37610807   <ASP.N ...

  7. bayaim_java_入门到精通_听课笔记bayaim_20181120

    ------------------java_入门到精通_听课笔记bayaim_20181120--------------------------------- Java的三种技术架构: JAVAE ...

  8. IoC实践--用Autofac实现MVC5.0的IoC控制反转方法

    Autofac是一个.net平台下发性能还不错的IoC框架,利用它可以实现依赖注入和控制反转,使自己的软件模块之间的耦合性大大降低,让软件扩展.维护更加容易.控制反转(Inversion of Con ...

  9. centos 6.5下安装mysql+nginx+redmine 3.1.0 笔记

    centos 6.5下安装mysql+nginx+redmine 3.1.0 笔记 目录[-] 过程 1.安装RVM 2.利用rvm安装 Ruby 1.9.3 并设为默认 3.安装rails 4.安装 ...

随机推荐

  1. 编码转换的处理 DreamWeaver SC6 打开会出现javacsript出现问题的处理

      编码转换的处理: 打开DW后,修改里面有个"页面属性": 点击页面属性,会弹出一个窗口,点击"标题/编码",在"编码"里面选择你要转换的 ...

  2. FontMetrics属性的介绍

    1.基准点是baseline 2.ascent:是baseline之上至字符最高处的距离 3.descent:是baseline之下至字符最低处的距离 4.leading:是上一行字符的descent ...

  3. Attribute

    Attribute介绍 咱们来说Attribute,他是一个类,所以自定义的Attribute都是继承自System.Attribute,一般命名的时候都是以Attribute结尾.在使用的时候我们可 ...

  4. div盒子中子元素(子元素可能是盒子, 图片) 中居中的三种方法

  5. Javascript学习笔记:3种递归函数中调用自身的写法

    ①一般的通过名字调用自身 function sum(num){ if(num<=1){ return 1; }else{ return num+sum(num-1); } } console.l ...

  6. css3 三角形

    https://jsbin.com/gexezo/edit?html,css,output https://jsbin.com/gexezo

  7. 利用scrapy-splash爬取JS生成的动态页面

    目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无 ...

  8. .proto 文件转js 文件方法【nodejs】

    npm install protobufjs -g pbjs proto\IM.Other.proto -t js>proto\IM.Other.js

  9. sqllite 入门

    链接: http://www.jb51.net/article/52064.htm

  10. python 3次登录

    #!/usr/bin/env python #-*- encoding: utf- -*- import sys import os import getpass import platform # ...