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. Java栈的实例模拟

    前言: “后进先出”---是栈(Stack)这种数据结构最基本的特点.很多程序设计语言都具有封装好的Stack工具,本文就带领大家一起将栈温习一下并附上一个模拟栈的程序. Java内存分配中,每通过n ...

  2. python 列表与元组的操作简介

    上一篇:Python 序列通用操作介绍 列表 列表是可变的(mutable)--可以改变列表的内容,这不同于字符串和元组,字符串和元组都是不可变的.接下来讨论一下列表所提供的方法. list函数 可以 ...

  3. matplotlib 柱状图、饼图;直方图、盒图

    #-*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl m ...

  4. 【BZOJ-4569】萌萌哒 ST表 + 并查集

    4569: [Scoi2016]萌萌哒 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 459  Solved: 209[Submit][Status] ...

  5. 数论专项测试——约数个数和(lucas的数论)

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

  6. SPOJ GSS2 Can you answer these queries II

    Time Limit: 1000MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Description Being a ...

  7. Objective-C Runtime与黑客帝国

    Runtime的消息机制让我容易想起黑客帝国的Matrix.而OC语言,就像是架构在C语言真实世界上的Matrix世界,Runtime接管了这个虚拟世界到真实世界的承接. 在黑客帝国里,Matrix的 ...

  8. SQL请求优化——请求次数统计,SQL写操作稀释

    引言 前几天做了这么一个东西:一个游戏中有个活动页面,活动页面有个商品,商品下面要显示该商品实浏览次数,就相当于是用户每出发一次请求这个浏览总次数都会添加一次,这个问题很简单,每次浏览的时候去数据库中 ...

  9. [JavaEE] Entity中Lazy Load的属性序列化JSON时报错

    The server encountered an internal error that prevented it from fulfilling this request.org.springfr ...

  10. spark操作geoip的domain数据库

    val ipv4 = sc.textFile("hdfs://hbase11:9000/sparkTsData/GeoIP2-Domain-Blocks-IPv4.csv").ma ...