https://blog.csdn.net/github_37410569/article/details/54986136

https://blog.csdn.net/qq_21419015/article/details/80453120

1、Razor表达式

在第五部分,已经演示了视图与布局的基础,接下来,我们将熟悉如何使用Razor表达式。

在“Controller”中添加 NameAndPrice 的动作方法中:

public ActionResult NameAndPrice()
{
  return View(myProduct);
}
可以看到视图在使用 Razor 的@Model 表达式,得到要插入属性的值,如下所示:

...
The product name is @Model.Name and is costs $ @Model.Price
...

插入数据值

Razor 表达式能做的最简单的事就是插入数据,可以用@Model 表达式来引用视图模型对象所定义的属性方法。或使用@ViewBag表达式。

为了演示,在 Controller 中添加 DemoExpression 新动作方法。按照下图:

点击该动作,添加强类型视图;按照下图编辑:

这里创建了一个html表格,使用模型对象和视图包的一些属性填充了单元格的值。启动项目并导航到/Home/DemoExpression,可以看到结果如下:

右键,在浏览器中查看。

设置标签属性值

Razor表达式不仅可以设置元素内容,还可以设置标签属性的值,在DemoExpression.cshtml最后添加一个div和一组checkbox,修改为如下内容:

这里使用Razor表达式在div元素上设置了一些data标签属性的值。
    Razor会将值为null的视图包属性或模型属性渲染成空字符串,并且Razor处理checked这种属性标签时,当值false或null时会完全删除该标签属性。

因为当checked属性为false、null或空字符串时,浏览器会显示复选框已勾选,而Razor直接删除该属性则使得复选框处于未选中状态了  ----  有checked属性就处于选中状态,即使是false

Razor渲染的html如下:

右键,浏览器中查看。

数据一致的效果。

使用条件语句

Razor能够处理条件语句,就可以根据视图数据的值,对视图输出进行剪辑而创造复杂而流畅的视图,并使其易于阅读和维护。 
如在DemoExpression.cshtml视图中添加了一个条件语句;

要开始一个条件语句,要在C#条件关键字前面放一个@字符,以{结束。需要注意的是在switch中,Razor表达式不能求取动态属性的值,因此必须进行强制类型转换为int类型。 
在Razor代码块内部,只要定义html以及Razor表达式就可以将html元素和数据插入到视图输出,如

@:字符阻止Razor将此行解释为一条C#语句。

以下是Razor视图使用if语句:

@model Razor.Models.Product

@{
  ViewBag.Title = "DemoExpression";
} <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>
<tr>
<td>Stock Level</td>
<td>
@if (ViewBag.ProductCount == 0)
{
@:Out of Stock
}
else if (ViewBag.ProductCount == 1)
{
<b>Low Stock(@ViewBag.ProductCount)</b>
}
else
{
@ViewBag.ProductCount
}
</td>
</tr>
</tbody>
</table>
<div data-discount="@ViewBag.ApplyDiscount" data-expression="@ViewBag.Expression" data-supplier="@ViewBag.Supplier">
包含元素具有数据属性
</div>
discount:<input type="checkbox" checked="@ViewBag.ApplyDiscount" />
expression:<input type="checkbox" checked="@ViewBag.Expression" />
supplier:<input type="checkbox" checked="@ViewBag.Supplier" />

  

枚举数组和集合

在Home控制器中定义DemoArray动作方法演示如何在MVC中传递和使用枚举和数组集合。

@model MVCDemo.Models.Product[]

@{
ViewBag.Title = "DemoArray";
Layout = "~/Views/_BasicLayout.cshtml";
} <h2>DemoArray</h2>
@if (@Model.Length > 0)
{
<table>
<thead>
<tr><th>ProductId</th><th>Product</th><th>Description</th><th>Category</th><th>Price</th></tr>
</thead>
<tbody>
@foreach (MVCDemo.Models.Product p in Model)
{
<tr>
<td>@p.ProductID</td>
<td>@p.Name</td>
<td>@p.Description</td>
<td>@p.Category</td>
<td>@p.Price</td>
</tr>
}
</tbody>
</table>
}
else
{
<h2>无产品数据</h2>
}

  

右键,在浏览器中查看:

这里使用了一个@if 语句,用一个@freach 表达式来枚举数组的内容,并且为每一条数据生成一个HTML 表格行。如果数组为空,会生成一个h2 元素。

处理命名空间
如果仔细观察我们可以看到,在最后一个foreach 循环中使用了全限定名的 Product 类,如下所示:

...
@foreach (Razor.Models.Product p in Model)
...
可以先 @using 引入命名空间。如下对 DemoArray.sc.html:

@using MVCDemo.Models
@model Product[]

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

<h2>DemoArray</h2>
@if (@Model.Length > 0)
{
<table>
<thead>
<tr><th>ProductId</th><th>Product</th><th>Description</th><th>Category</th><th>Price</th></tr>
</thead>
<tbody>
@foreach (Product p in Model)
{
<tr>
<td>@p.ProductID</td>
<td>@p.Name</td>
<td>@p.Description</td>
<td>@p.Category</td>
<td>@p.Price</td>
</tr>
}
</tbody>
</table>
}
else
{
<h2>无产品数据</h2>
}

使用 Razor 表达式的更多相关文章

  1. 5.4 使用 Razor 表达式

    以下内容主要展示 Razor 所支持的各种表达式,以及如何用它们来创建视图的内容. 在一个好的 MVC 框架应用程序中,动作方法与视图的作用是清晰.分离的.其规则很简单,如表所示: 组件 要做的事 不 ...

  2. 使用Razor 使用Razor表达式处理命名空间 精通ASP-NET-MVC-5-弗瑞曼

  3. 使用Razor表达式 举数组和集合 精通ASP-NET-MVC-5-弗瑞曼

  4. 使用Razor表达式 使用条件语句 来自 精通ASP-NET-MVC-5-弗瑞曼

  5. ASP.NET Core 中文文档 第四章 MVC(3.2)Razor 语法参考

    原文:Razor Syntax Reference 作者:Taylor Mullen.Rick Anderson 翻译:刘怡(AlexLEWIS) 校对:何镇汐 什么是 Razor? Razor 是一 ...

  6. Razor基础语法一

    目录: 什么是Razor? 渲染HTML Razor语法 隐式 Razor 表达式 显式 Razor 表达式 什么是Razor? Razor是基于服务端代码转换成网页的标记语法.语法主要包括Razor ...

  7. ASP.NET MVC——Razor视图引擎

    Razor是MVC框架视图引擎,我们今天就来说一说Razor视图引擎. 首先还是来创建一个基础项目叫Razor来演示. 先来定义一个Model叫Product public class Product ...

  8. Razor 视图引擎 – ASP.NET MVC 4 系列

           Razor 视图引擎是 ASP.NET MVC 3 开始扩展的内容,并且也是默认视图引擎.        Razor 通过理解标记的结构来实现代码和标记之间尽可能顺畅的转换.下面的例子演 ...

  9. MVC – 7.Razor 语法

    7.1 Razor视图引擎语法 Razor通过理解标记的结构来实现代码和标记之间的顺畅切换. @核心转换字符,用来 标记-代码 的转换字符串. 语境A: @{ string rootName=&quo ...

随机推荐

  1. 使用INF创建CSR文件

    公司要为一个英国的客户提供由HTTP升级到HTTPS的服务,于是接触到了申请SSL证书这方面的内容. 一.总的来说,申请证书需要两步,一是创建CSR文件,二是在证书提供商购买证书并将CSR文件发给证书 ...

  2. C#排序算法的实现---快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的 ...

  3. C# WPF发票打印

    微信公众号:Dotnet9,网站:Dotnet9.问题或建议,请网站留言: 如果您觉得Dotnet9对您有帮助,欢迎赞赏 C# WPF发票打印 内容目录 实现效果 业务场景 编码实现 本文参考 源码下 ...

  4. ng-模板语法

    插值 文本绑定 <p>Message: {{ msg }}</p> <p [innerHTML]="msg"></p> 属性绑定 & ...

  5. Java8新特性一览表

    总览 forEach() method in Iterable interface(Iterable接口中的forEach()方法) default and static methods in Int ...

  6. (jsp+servlet+javabean )MVC架构

    MVC是三个单词的缩写,这三个单词分别为:模型.视图和控制. 使用的MVC的目的:在于将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如Windows系统资源管理器文件夹内容的显示方 ...

  7. 【1】Logistic回归

    Logistic回归  在Logistic回归中,损失函数L定义为 成本函数 J  损失函数是单个训练样本的误差,而成本函数是所有训练样本误差的平均值. 之所以选择这个损失函数,是因为该损失函数L与w ...

  8. 【巨杉数据库SequoiaDB】省级农信国产分布式数据库应用实践

    本文转载自<金融电子化> 原文链接:https://mp.weixin.qq.com/s/WGG91Rv9QTBHPsNVPG8Z5g 随着移动互联网的迅猛发展,分布式架构在互联网IT技术 ...

  9. MySQL的数据库备份

    MySQL的数据库备份 备份的原因: 1.保证重要数据不丢失 2.数据转移 MySQL数据库备份方式: 1.方法1:在Sqlyog这种可视化工具中手动导出 2.方法2:直接拷贝物理文件(就是data文 ...

  10. C++-蓝桥杯-矩阵乘法[快速幂]

    忘了改矩阵的大小居然还有33分,我醉了 #include <cstdio> ; struct Matrix{int a[N][N];}; int n,m; Matrix A,O,I; Ma ...