一、运用布局和视图起始文件

布局的使用,可以简化视图,允许用户创建能够运用于多个视图的通用HTML,并使得维护更加容易。下面是一个简单的例子:
域模型类:
  1. public class Product
  2. {
  3. public int ProductID { get; set; }
  4. public string Name { get; set; }
  5. public string Description { get; set; }
  6. public decimal Price { get; set; }
  7. public string Category { get; set; }
  8. }
控制器:
  1. using System.Web.Mvc;
  2. using Razor2.Models;
  3. namespace Razor2.Controllers
  4. {
  5. public class HomeController : Controller
  6. {
  7. Product myProduct = new Product
  8. {
  9. ProductID = 1,
  10. Name = "Kayak",
  11. Description = "A boat for one person",
  12. Category = "Watersports",
  13. Price = 275m
  14. };
  15. public ActionResult Index()
  16. {
  17. return View(myProduct);
  18. }
  19. }
  20. }
右击控制器方法,创建Index视图。
View视图代码如下
  1. @model Razor2.Models.Product
  2. @{
  3. ViewBag.Title = "Index";
  4. }
  5. Product Name:@Model.Name
【注意】勾选“使用布局及母版页”但下面的文本框为空,使用的是视图起始文件_ViewStart.cshtml里规定的视图
  1. 视图起始文件
  2. @{
  3. Layout = "~/View/_BasicLayout.cshtml";
  4. }

这里说下是否勾选“使用布局或母版页”以及下面的文本框是否选择的不同:

不勾选 勾选,文本框为空 勾选,且文本框不为空
不同点 不运用布局,即视图自己完成css等布局 使用视图起始文件规定的布局 使用文本框中选择的布局
表现
@{
    ViewBag.Title = "Index";
    Layout = null;

}  

@{
    ViewBag.Title = "Index";

}  

@{
    ViewBag.Title = "Index";
    Layout = "~/View/_BasicLayout.cshtml";

}  

【使用视图起始文件的好处】:

有很多视图都引用同一个布局,而如果需要重命名布局文件,就必须找到引用该布局的每一个视图进行修改。通过使用视图起始文件可以解决这个问题。
不必以任何方式指定希望使用的视图起始文件。MVC框架会对此文件进行定位,并自动使用其内容。
在视图文件中对这一值所做的定义具有更高的优先级,这便是对视图起始文件的覆盖。

二、使用分部视图

分部视图是嵌入另一个视图中的一个内容片段。
分部视图是自包含文件,且可以跨视图重用,有助于减少重复,尤其是需要在应用程序的几个地方渲染同样的数据时。
对ProductSummary分部视图添加标记
  1. @model Razor2.Models.Product
  2. <div class="item">
  3. <h3>@Model.Name</h3>
  4. @Model.Description
  5. <h4>@Model.Price.ToString("c")</h4>
  6. </div>
然后在相应的视图里,添加对这个分部视图的引用
  1. @Html.RenderPartial("ProductSummary",p);
  2. //或者
  3. //@Html.Partial("ProductSummary", p);
【这里好像要求p是Model里一个子元素,即Model映射的对象要是一个集合。具体情况待以后观察。。。】


三、使用Razor表达式

1)使用条件语句
Home控制器增加下面代码
  1. public ActionResult DemoExpression() {
  2. ViewBag.ProductCount = 1;
  3. ViewBag.ExpressShip = true;
  4. ViewBag.ApplyDiscount = false;
  5. ViewBag.Supplier = null;
  6. return View();
  7. }
创建相应的视图
  1. @model Razor2.Models.Product
  2. @{
  3. ViewBag.Title = "DemoExpression";
  4. }
  5. <h2>DemoExpression</h2>
  6. <h4>数量</h4><br />
  7. @switch ((int)ViewBag.ProductCount) {
  8. case 0:
  9. @: Out of Stock
  10. break;
  11. case 1:
  12. <b>Low Stock(@ViewBag.ProductCount)</b>
  13. break;
  14. default:
  15. @ViewBag.ProductCount
  16. break;
  17. }
a.可以看到在Razor视图里可以使用C#语法,前提是要在C#关键字前面加一个@字符。
b.在Razor代码块内部,只要通过定义HTML【如:<b>Low Stock(@ViewBag.ProductCount)</b>】及Razor表达式【如:@ViewBag.ProductCount】,就可以将HTML元素和数据值插入到视图输出。
c.而如果想将未包含在HTML元素中的文本文字插入到视图,则需要使用Razor的辅助工具@:,@:字符可以阻止Razor将此行解释为一条C#语句

2.在视图中加入命名空间的两种方式
1)可以在视图中运用@using表达式,引入命名空间;
2)在Views/Web.config文件【这是视图专用的配置文件】里的<namespaces>标签里增加子标签;


【参考资料】
《精通ASP.NET MVC4》

MVC开发之Razor的使用的更多相关文章

  1. 解析ASP.NET Mvc开发之EF延迟加载

    目录: 1)从明源动力到创新工场这一路走来 2)解析ASP.NET WebForm和Mvc开发的区别 3)解析ASP.NET Mvc开发之查询数据实例 ------------------------ ...

  2. 解析ASP.NET Mvc开发之EF延迟加载 分类: ASP.NET 2014-01-04 01:29 4017人阅读 评论(1) 收藏

    目录: 从明源动力到创新工场这一路走来 解析ASP.NET WebForm和Mvc开发的区别 解析ASP.NET 和Mvc开发之查询数据实例 ----------------------------- ...

  3. ASP.NET Mvc开发之EF延迟加载

    EF延迟加载:就是使用Lamabda表达式或者Linq 从 EF实体对象中查询数据时,EF并不是直接将数据查询出来,而是在用到具体数据的时候才会加载到内存. 一,实体对象的Where方法返回一个什么对 ...

  4. Asp.net Mvc模块化开发之“开启模块开发、调试的简单愉快之旅”

    整个世界林林种种,把所有的事情都划分为对立的两个面. 每个人都渴望的财富划分为富有和贫穷,身高被划分为高和矮,身材被划分为胖和瘦,等等. 我们总是感叹,有钱人的生活我不懂;有钱人又何尝能懂我们每天起早 ...

  5. Asp.net Mvc模块化开发之“部分版本部分模块更新(上线)”

    项目开发从来就不是一个简单的问题.更难的问题是维护其他人开发的项目,并且要修改bug.如果原系统有重大问题还需要重构. 怎么重构系统不是本文探讨的问题,但是重构后如何上线部署和本文关系密切.这个大家可 ...

  6. UWP开发之Template10实践二:拍照功能你合理使用了吗?(TempState临时目录问题)

    最近在忙Asp.Net MVC开发一直没空更新UWP这块,不过有时间的话还是需要将自己的经验和大家分享下,以求共同进步. 在上章[UWP开发之Template10实践:本地文件与照相机文件操作的MVV ...

  7. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  8. Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发

    hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...

  9. JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术

    在上篇博客中,我们聊了<JavaEE开发之SpringMVC中的自定义拦截器及异常处理>.本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js.css这些静态文件的加载配置 ...

随机推荐

  1. 永久解决AndroidStudio Aapt2的问题

    https://blog.csdn.net/qq_37280248/article/details/80142260 修改电脑c://user/王明 中文名去掉 https://www.jb51.ne ...

  2. 最大流-前置push-relabel算法实现

    Front Push-Relabel Algorithm 接口定义 Input:容量数组vector<vector<int>> capacity ,大小为n:源点int sou ...

  3. Go语言实现:【剑指offer】二叉树中和为某一值的路径

    该题目来源于牛客网<剑指offer>专题. 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路 ...

  4. 20200221--python学习第14天

    今日内容 带参数的装饰器:flash框架+django缓存+写装饰器实现被装饰的函数要执行N次 模块: os sys time datetime和timezone[了解] 内容回顾与补充 1.函数 写 ...

  5. 服务器安全之iptables

    服务器安全之iptables iptables防火墙简介 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的基于包过滤的防火墙 ...

  6. 【阿里云IoT+YF3300】15.阿里云物联网小程序构建

    2013年8月,“轻应用”概念提出,但是仅仅活跃四年随后淡出 ,直到2017年1月9号借助微信小程序成功续命.一时间,以微信小程序和支付宝小程序为代表的轻应用解决方案迅速贯穿多个环节,成为“万物互联” ...

  7. JS将扁平化的数据处理成Tree结构

    let jsonData= [ { id:1,  parentId:0, name:"一级菜单A" }, { id:2, parentId:0, name:"一级菜单B& ...

  8. 零基础学到什么程度可以找一份web前端工作?

    能找到一份前端开发工作,首先你起码得是一个合格的初级前端工程师.那么,什么是初级前端工程师?初级前端工程师都会做些什么?这个问题需要分为以下几个方面来说: 一.对应岗位的工作职责初级前端,主要负责产品 ...

  9. 掌握这四大MySQL知识点,吊打面试官

    作为一名后端开发,MySQL的使用必不可少,合理的使用索引和索引调优是后端开发者必须掌握的技能之一. 在日常数据库的问题当中,不合理的使用索引占大部分. MySQL是大家工作上最常用的关系型数据库之一 ...

  10. net start MySQL57 MySQL57 服务正在启动 . MySQL57 服务无法启动。

    造成这种情况的原因有很多,如果直接百度错误信息的话,不一定能很快解决问题,所以,出现这种情况,我们可以使用 mysqld --console 命令来查看报错信息,然后根据报错信息来百度,这样就很快定位 ...