1、基础规则

视图的职责是向用户提供用户界面。

视图位于View目录下:有普通的需要控制器渲染的视图,有局部视图,有布局视图等各种视图。

2、视图渲染

控制器默认情况下渲染与控制器同名的目录内的与Action同名的视图,也可以在Action中,通过return view(“视图名”)来指定需要渲染的其他视图,如果视图位于同一个目录内,采用视图名称即可,如果视图位于不同的目录内,需要提供服务端根路径“~/view/Example/index.cshtml”。

3、强类型视图与数据传递

控制器中通过viewData和ViewBag给渲染的视图传递数据,viewData是键值对的对象,viewBag是dynamic字段类型。viewData是viewDataDictionary类型,不是普通的Dictionary类型,它具有一个额外的Model属性,利用这一点可以很容易的向视图传递一个特定的视图类型,称为视图主模型(只能一个),此对象需要作为return view(对象)使用,并在视图的顶部添加如下的代码进行声明:

例如:强类型方式

@model List<MvcMusicStore.Models.Album>

@foreach (var album in Model)

在视图中通过@Model变量获取声明的强类型对象。

如果要传递与视图主模型无关的其它数据,可以存放在viewBag中,通过类型转换的方式来实现强类型的效果。

例如: 非强类型方式

@using MvcMusicStore.Models;

@foreach (Album album in ViewBag.albums)

 4、视图模型ViewModel

对于一个视图只能有一个视图主模型的问题,为了能够将所有的数据都采用强类型的方式进行访问,可以单独编写一个“视图模型类”,将需要传递的数据定义在视图模型类中。

例如:定义视图模型

public class ShoppingCartViewModel
{
public List<Cart> CartItems { get; set; }
public decimal CartTotal { get; set; }
}

强类型引用视图模型:@model MvcMusicStore.ViewModels.ShoppingCartViewModel

5、视图的增加

可以通过解决方案,直接添加一个视图,添加视图时,可以选择视图引擎Razor,是否创建强类型视图,是否创建局部视图,是否套用模板页等选项。

也可以通过Controller中对应的Action,直接添加对应Action所对应的视图。

6、Razor表达式注意事项

Razor代码主要分为:

代码表达式 @代码,无需指出代码表达式的结束位置,会自动识别结束,转为标记模式,有的有二义性,可以通过@(代码)的方式来告诉代码的结束位置。如果要在页面上输出@符号,可以通过@@的方式。

或者代码块 @{  代码;  }

Razor表达式是用HTML自动编码的,可以防止XSS攻击,内容会被直接显示在网页上,失去了原始内容的HTML特性(不被浏览器解析)。如果不要进行HTML编码,可以采用@HTML.Raw()。

当在JS中将用户提供的值赋值给变量时,要使用Javascript字符串编码而不仅仅是HTML编码,这样可以有效的防止被浏览器解析,避免XSS攻击。

var message = "hello @Ajax.JavaScriptStringEncode("\u003cscript\u003ealert(\u0027hack\u0027)\u003c/script\u003e")";

7、Razor语法实例

1) 隐式代码表达式

@Model.Student

2) 显示代码表达式

@(Model.Student)

3) 无编码代码表达式

@HTML.Raw(Model.Student)

4) 代码块,代码块中出现标记会自动结束

@{ Model.Studeng; }

5)文本和标记相混合

@foreach(var item in items)

{

  <div>@item.Name</div>  //有标记后,插入代码需要再次@开头

}

6)转义字符

@@

7) 注释

@*

@foreach(var item in items)

{

  <div>@item.Name</div>  //有标记后,插入代码需要再次@开头

}

*@

asp.net mvc 4 高级编程学习笔记:第三章 视图(1)的更多相关文章

  1. asp.net mvc 4 高级编程学习笔记:第三章 视图(2)

    页面布局 asp.net MVC中提供了布局的支持,默认情况下才布局文件保存到 /View/Shared/目录下的_Layout.cshtml,View目录有个_ViewStart.cshtml文件, ...

  2. ASP.NET MVC5 高级编程-学习日记-第三章 视图

    开发人员之所以花费大量时间来重点设计控制器和模型对象,是因为在这些领域中,精心编写的整洁代码是开发一个可维护Web应用程序的基础. 3.1 视图的作用 视图的职责是向用户提供用户界面.当控制器针对被请 ...

  3. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  4. asp.net mvc 4 高级编程学习笔记:第四章 模型

    数据模型 数据模型及O/R转化,采用EntityFramework实现. 可以采用firstCode模型,首先定义模型,通过模型生成数据库,也可以通过安装EFPowerTools,通过数据库自动生成对 ...

  5. JavaScript高级程序设计学习笔记第三章--基本概念

    一.标识符: 1.区分大小写 2.命名规则: 第一个字符必须是一个字母.下划线(_)或一个美元符号($) 其他字符可以是字母.下划线.美元符号或数字 标识符中的字母也可以包含扩展的 ASCII 或 U ...

  6. ASP.NET MVC 4高级编程(第4版)

    <ASP.NET MVC 4高级编程(第4版)> 基本信息 作者: (美)Jon Galloway    Phil Haack    Brad Wilson    K. Scott All ...

  7. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

  8. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

  9. [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设

    [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...

随机推荐

  1. 卸载移动硬盘出现 device is busy

    umount /dev/sdb1 # device is busy fuser -m -v /dev/sdb1 # 查看 fuser -m -k /dev/sdb1 # 杀死进程

  2. Leetcode 134 Gas Station

    There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...

  3. Hadoop设置环境变量注意事项

    路径是/etc/profile. 这个东西不能再普通下设置,打开是彩色的,即便是“:wq!”也不能保存,必须去root下,黑白的. 然后root下source /etc/profile,然后exit, ...

  4. bzoj1113: [Poi2008]海报PLA

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  5. QIBO CMS /inc/common.inc.php Local Variables Overriding Vul In $_FILES

    目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 齐博在/inc/common.inc.php使用$$_key=$value.ext ...

  6. 虚拟机:Python虚拟机的基本了解

    探索某个东西,我们需要知道这个东西是用来干什么的,能给我们带来什么,解决了什么样的问题,有什么优缺点等等:简要了解了一下Python虚拟机的特征: 目前有几个疑问: 1.对象 · Python通过对象 ...

  7. python regrex

    Python正则表达式指南 The source from the website http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.htm ...

  8. 使用Keil uVision下载hex文件

    在uVision3/uVision4/uVision5中,可以创建一个项目用来下载HEX文件到flash里面. 具体步骤如下: 1.  在菜单中,选择 Project - New Project... ...

  9. Jquery 基本知识(二)

    一.数据类型 5种基本数据类型:Null/Undefined/String/Boolean/Number 1种复杂数据类型:Object 二.数据类型检测 1.typeof 2.instanceof/ ...

  10. glade2支持C++代码的输出(1)

    开发了一个基类,用于支持GTK2的信号回调 见BaseObject.zip 为了便于快速通过glade设计界面,并生成相应的C++代码,我对glade-2 2.12.2的代码进行了修改 原始代码:gl ...