ASP.NET MVC5 高级编程 第3章 视图

参考资料《ASP.NET MVC5 高级编程》第5版

第3章 视图

3.1 视图的作用

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

不像基于文件的框架,ASP.NET Web Forms 和PHP ,视图本身并不被访问,浏览器,并不能直接指向一个视图并渲染它。相反视图被控制器渲染,因为控制器提供了渲染所需要的数据。

一般情况下,控制器需要向视图提供一些信息,所以这会传递一个数据转移对象,叫做模型。完成这一过程需要两部分操作,其中一个是检查由控制器提交的模型对象,另一个是将其内容转化为HTML格式。

3.2 视图的基础知识

在最简单的情况中,向控制器发送一个请求,控制器返还一个视图。

3.3 理解视图约定

eg1:约定可以重写

        public ActionResult Index(){return View("notIndex");}

eg2:指定完全不同目录结构中的视图

        public ActionResult Index(){return View("~/Views/Example/Index.cshtml");}

tips

在使用这种语法时,必须提供视图文件的文件扩展名

3.4 强类型视图

3.4.1 ViewBag

eg1:通过重载的View 方法传递模型实例来指定模型

        public ActionResult Index(){ var a=0;return View(a);}

告知试图正在使用哪些类型的模型需要使用 @model 来声明。

对于在视图中经常使用的名称空间,可以在Views 目录下的Web.config 文件中声明。

3.4.2 理解ViewBag、ViewData 和 ViewDataDictionary

从技术角度来讲,数据从控制器推送到视图实际上是使用了一个ViewData 的ViewDataDictionary。

我们可以通过标准字典语法设置或读取其中的值

ViewData["CurrentTime"]=DateTime.Now;
    

ViewBag 是ViewData 的动态封装器。它利用了dynamic 关键字。ViewBag.CurrentTime 等同于 ViewData["CurrentTime"]

ViewData["CurrentTime"]=DateTime.Now;
    

3.5 视图模型

eg1:通过ViewBag 填充下拉列表

例一:

view 层:

                                            @Html.DropDownList("ClassID")

Controller 层:

ViewBag.ClassID=new SelectList(cb.GetClassModels(),"ID","ClassName");

例二:

view 层:

                                            @Html.DropDownList("TerSystem")

Controller 层:

            List AllFieldValue = new List();
            List<sys_fieldvalue> sfv = m_Dic.GetOrderByDictionarys("TerminalSystem", "", "", ref msg);
            if (sfv != null)
            {
                for (int i = 0; i < sfv.Count(); i++)
                {
                    AllFieldValue.Add(new SelectListItem { Text = sfv[i].V_Text + " ", Value = sfv[i].V_Code });
                }
            }
            ViewBag.TerSystem = new SelectList(AllFieldValue, "Value", "Text");

3.6 添加视图

通过视图基架模型来构建模型和创建基架视图。

3.7 Razor 视图引擎

3.7.1 Razor 的概念

Razor 是默认的视图引擎。Razor 为视图表示提供了一种精简的语法,最大限度的减少了语法和额外的字符。

3.7.2 代码表达式

Razor 中的核心转化字符是"at"符号(@)。有两种基本类型的转换:代码表达式和代码块。

3.7.3 HTML 编码

Razor 表达式是使用HTML 自动编码的。

可以通过创建一个HtmlString 的实例或Html.Raw便捷方法来展示不编码的HTML标记

当在JavaScript 中将用户提供的值赋给变量时,要使用@Ajax.JavaScriptStringEncode 方法对用户输入进行编码。

3.7.4 代码块

代码块中的语句(如foreach和if)是不需要使用花括号的

可以通过创建一个HtmlString 的实例或Html.Raw便捷方法来展示不编码的HTML标记

3.7.5 Razor 语法示例

1,隐式代码表达式

@model.message

2,显式代码表达式

@(model.message)

3,无编码代码表达式

html.raw

4,代码块

@{}

5,文本与标记相结合

@{<@(model.message)>}

6,混合代码与纯文本

@if(1>0){<@(model.message)>}

7,转义代码分割符

@@

8,服务器端的注释

@*{<@(model.message)>}*@

9,调用泛型方法

3.7.6 布局

Razor 视图有助于使应用程序中的多个视图表示一致的外观。

可使用布局为网站定义公共模板。公共模板包括一个或多个占位符,应用程序中的其它视图为它提供内容。

视图中的@RenderBody 调用表示一个占位符,用来标记这个布局的视图将渲染它们的主要内容的位置。

视图中可能有多个RenderSection ,默认情况下,视图必须为布局定义的每个RenderSection 提供相应内容。@RenderSection("Footer")

RenderSection 方法有一个重载版本,允许制定不需要的节。@RenderSection("Footer",require:false)

判断RenderSection 是否有定义:IsSectionDefined 方法

3.7.7 ViewStart

Views目录下的_ViewStart.cshtml文件,指定了一个默认布局。代码先于任何一个视图运行,我们可以在它里面对共同的视图配置进行统一设置。

3.8 指定部分视图

不渲染布局。

3.9 小结

视图引擎用途非常有限。它们的目的是获取从控制器传递给它们的参数,并生成格式化的输出。

时间: 2024-10-11 11:05:34

ASP.NET MVC5 高级编程 第3章 视图的相关文章

ASP.NET MVC5 高级编程 第2章 控制器

参考资料<ASP.NET MVC5 高级编程>第5版 第2章 控制器 控制器:响应用户的HTTP 请求,并将处理的信息返回给浏览器. 2.1 ASP.NET MVC 简介 MVC 模式中的控制器(controller)主要负责响应用户的输入,并且在响应时修改(Model).通过这种方式,MVC 中的Controller 主要关注的是应用程序流,输入数据的处理,以及对相关视图(View)数据来源的提供 MVC 模式中 URL 首先告诉路由去实例化哪个控制器,调用哪个方法,并为该方法提供需要的参数

ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法

参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTTP Post 请求 EF 对于外键关系,数据库名称等也有约定.这些约定取代了以前需要提供给一个关系对象映射框架的所有映射和配置. GET 方法:GET 请求的所有参数都在URL中,因此可以为GET 请求建立书签. POST 方法:浏览器把输入值放入 HTTP 请求的主体中. 5.2 辅助方法 可以通过视图的H

ASP.NET MVC3 高级编程(第5章) 孙远帅 译

第5章 表单和HTML辅助方法 本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 * 显示和渲染的辅助方法 顾名思义,HTML辅助方法是用来辅助HTML开发的.这里可能有一个疑问:诸如向文本编辑器中输入HTML元素如此简单的任务,还需要任何帮助吗?输入标签名称是很容易的事情,但是确保HMTL页面链接中的URL指向正确的位置.表单元素拥有可用于模型绑定的合适的名称和值,以及当模型绑定失败时,其他元素能够显示相应的错误提示消息,这些才是使用HMTL的难点. 实现所

ASP.NET MVC5高级编程 之 视图

1.1理解视图约定 当创建一个项目模版时,可以注意到,项目以一种非常具体的方式包含了一个结构化的Views目录.在每一个控制器的View文件夹中,每一个操作方法都有一个同名的视图文件与其对应.这就提供了视图与操作方法关联的基础. 1 public ActionResult Index() 2 { 3 return View(); 4 } 视图选择逻辑在/Views/ControllerName目录(这里就是去掉Controller后缀的控制器名)下查找与操作方法同名的视图.此处选择的是/View

ASP.NET MVC5高级编程 之 表单

1.1 action和method特性 表单是包含输入元素的容器,其中包含按钮.复选框.文本框等元素.表单中的这些输入元素使得用户能够向页面中输入信息,并把输入的信息提交给服务器.数据的提交依赖于action和method. action特性用以告知Web浏览器信息发送到哪里,所以action包含一个URL.这里的URL可以是相对的,也可以使绝对的. 1 <form action="http://www.bing.com/search"> 2 <input name=

ASP.Net MVC 5 高级编程 第7章 成员资格、授权和安全性

第7章 成员资格.授权和安全性 7.1 安全性 ASP.NET MVC 提供了许多内置的保护机制(默认利用 HTML 辅助方法和Razor 语法进行 HTML编码以及请求验证等功能特性,以及通过基架构建的控制器白名单表单元素来防止重复提交攻击) 永远不要相信用户提交的任何数据. 实际的例子 每次渲染用户提交的数据的时候对其进行编码. 考虑好网站哪些部分允许用户匿名访问,哪些部分需要认证访问. 不要试图自己净化用户的HTML 输入,否则就会失败. 在不需要通过客户端脚本访问cookie时,使用HT

moon。  使用会话维持状态--基于java web高级编程第5章 使用会话维持状态

5.1 提出的问题 如何关联来自客户的多个请求? 5.1.1维持状态 会话用于维护请求和请求之间的状态.HTTP是无状态的 从服务器角度,当用户的Web浏览器打开第一个链接到服务器的套接字时请求就开始了,直到服务器返回最后一个数据包并关闭连接时,该请求结束. 此时,浏览器与服务器之间没有任何联系,当下一次请求链接开始时,无法将下一次请求与之前的请求关联起来. 购物车中,每次向购物车中添加商品时,网站通过什么方式了解到它们都是来自于同一个基选集中的同一浏览器,并将它关联到你的浏览器,其他人是 无法

【读书笔记】C#高级编程 第六章 数组

(一)同一类型和不同类型的多个对象 如果需要使用同一类型的多个对象,就可以使用数组或集合(后面章讲). 如果需要使用不同类型的多个对象,可以使用Tuple(元组)类型. (二)简单数组 如果需要使用同一类型的多个对象,可以使用数组.数组是一种结构,它可以包含同一类型的多个元素. 1.数组的声明 在声明数组时,应先定义数组总元素的类型,其后是一堆空方括号和一个变量名. 例子: 以下代码声明了一个包含整形类型的数组 int[] intArray; 2.数组的初始化 声明了数组后,就必须为数组分配内存

《ASP.NET MVC高级编程(4版)》读书笔记(5)表单和HTML辅助方法

5.1 表单使用 5.1.1 action 和 method 特性 <form action="/Home/Index"> <input name="q" type="text"/> <input value="提交" type="submit" /> </form> 如果没有 method 默认是: get 方法. 5.1.2 GET 方法还是 POST 方