《精通MVC5.0》笔记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 = ,
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的更多相关文章
- 《精通MVC5.0》路由笔记
MVC使用路由系统处理请求的URL.路由系统主要功能 检查请求的URL,并理解该URL对应的控制器和方法 生成URL地址 在MVC程序中有两种方式创建路由:convention-based routi ...
- Asp.net core 2.0.1 Razor 的使用学习笔记(五)
按说这里应该写关于Role角色类的笔记,但是我还没时间实验这块,所以等以后我搞定了再来分享.现在先写其他部分. Asp.net core 2.0.1 Razor 的使用学习笔记——建立模型 按照微软官 ...
- Asp.net core 2.0.1 Razor 的使用学习笔记(六)
Asp.net core 2.0.1 Razor 的使用学习笔记——基本页面的建立 VS这版(vs版本:15.5.6 .net版本:4.7.02558)的Razor页面自动生成就是坑爹货,它自动生成 ...
- ASP.NET Identity 2集成到MVC5项目--笔记01
Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...
- ASP.NET Identity 2集成到MVC5项目--笔记02
ASP.NET Identity 2集成到MVC5项目--笔记01 ASP.NET Identity 2集成到MVC5项目--笔记02 继上一篇,本篇主要是实现邮件.用户名登陆和登陆前邮件认证. 1. ...
- 《ASP.NET4从入门到精通》学习笔记2
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/dongdongdongJL/article/details/37610807 <ASP.N ...
- bayaim_java_入门到精通_听课笔记bayaim_20181120
------------------java_入门到精通_听课笔记bayaim_20181120--------------------------------- Java的三种技术架构: JAVAE ...
- IoC实践--用Autofac实现MVC5.0的IoC控制反转方法
Autofac是一个.net平台下发性能还不错的IoC框架,利用它可以实现依赖注入和控制反转,使自己的软件模块之间的耦合性大大降低,让软件扩展.维护更加容易.控制反转(Inversion of Con ...
- 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.安装 ...
随机推荐
- iOS代码汉字转拼音
NSString *hanziText = @"今天天气不错"; if ([hanziText length]) { NSMutableString *ms = [[NSMutab ...
- 菜鸟学Android编程——简单计算器《一》
菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...
- SuiteScript > Script Queue Monitor (Beta)
Share Note: Installing and Accessing the Script Queue Monitor Script Queue Monitor (Beta) is availab ...
- spring MVC、mybatis配置读写分离
spring MVC.mybatis配置读写分离 1.环境: 3台数据库机器,一个master,二台slave,分别为slave1,slave2 2.要实现的目标: ①使数据写入到master ②读数 ...
- linux多文本替换内容
之前不小心写错了代码,把nil写成了Nil,脚本写的传到git中了,批量替换解决办法: grep "Nil" -rl $PATH/ |xargs sed -i 's/Nil/nil ...
- OpenLayers元素选择工具
OpenLayers的selector工具相信挺多人都没有用过,其实这个工具用处还是不少的.比如完成元素查询时,需要实现图属性联动,使用这个工具很方便.最近做项目时也使用到这个工具,使用起来确实挺方便 ...
- Ubuntu 16.04安装搜狗输入法
转载: http://www.it610.com/article/5319575.htm 打开firefox浏览器,输入网址www.baidu.com,打开后搜索搜狗拼音 linux进入到搜狗拼音li ...
- 使用扫描二维码打开app
应该不少人遇到过这种需求,扫描二维码打开app如果用户没有这个app则提示它跳转. 用网页直接来调用app是不打可能的,必须原生那边先做一些配置. 首先,安卓和苹果的调用方法是不同的. 所以我们需要先 ...
- Linux搭建apache +PHP(CentOS系统)
1.安装MySQL bash # sudo yum install mysql-server (下载mysql) bash # service mysqld start (开启mysql服务) ba ...
- Nginx中rewrite实现二级域名、三级域名、泛域名、路径的重写
最常见的: 静态地址重定向到带参数的动态地址 rewrite "^(.*)/service/(.*)\.html$" $1/service.php?sid=$2 permanent ...