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. CryptoJS DES加密

    <!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equ ...

  2. 给定时器settimeout、setInterval调用传递参数

    无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在 许多场合必须要带参数,这就需要想方法解决.例如对于函数hello(_na ...

  3. lua 和 c/c++ 交互 (持续更新)

    参考: http://blog.csdn.net/xiaohuh421/article/details/7476485 http://blog.csdn.net/shun_fzll/article/d ...

  4. Radmin Server-3.5 完美绿色破解版(x32 x64通用) 第三版 + 单文件制作方法

    Radmin Server v3.5 汉化破解绿色版(x32 x64通用) 第三版 下载链接: https://pan.baidu.com/s/1qYVcSQo 2016年7月8日更新第三版1.修复在 ...

  5. jQuery学习笔记(四)jQuery中的动画

    目录 show()方法和hide()方法 fideIn()方法和fadeOut()方法 slideUp方法和slideDown()方法 自定义动画方法animate toogle(),slideTog ...

  6. wcf 同时支持webhttp 和 引用方式

    wcf 实现参考 http://www.cnblogs.com/mingmingruyuedlut/p/4223116.html 兼容两种方式 1.修改服务端webconfig <system. ...

  7. CentOS 7.2.1511编译安装Nginx1.10.1+MySQL5.7.14+PHP7.0.11

    准备篇 一.防火墙配置 CentOS 7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.se ...

  8. [OC] 图片平铺

    Tip: self.bgImg.image = [self.bgImg.image resizableImageWithCapInsets:UIEdgeInsetsMake(100, 40, 40, ...

  9. 删除github仓库中的某个文件夹

    最近在做一个项目,由于前期文件夹名是中文,如下:    |---Repository       |--- React单页面音乐播放器 并且git push到了github上. 后来在本地把文件夹re ...

  10. Install Nvidia driver 367.18 or later

    Install Nvidia driver 367.18 or later from ppa:graphics-drivers/ppa as follows: sudo add-apt-reposit ...