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 小结
视图引擎用途非常有限。它们的目的是获取从控制器传递给它们的参数,并生成格式化的输出。
ASP.NET MVC5 高级编程 第3章 视图的更多相关文章
- ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法
参考资料<ASP.NET MVC5 高级编程>第5版 第5章 表单和HTML辅助方法 5.1 表单的使用 5.1.1 action 和 method 特性 默认情况下,表单发送的是 HTT ...
- ASP.NET MVC5 高级编程 第2章 控制器
参考资料<ASP.NET MVC5 高级编程>第5版 第2章 控制器 控制器:响应用户的HTTP 请求,并将处理的信息返回给浏览器. 2.1 ASP.NET MVC 简介 MVC 模式中的 ...
- ASP.NET MVC5 高级编程-学习日记-第一章 入门
1.1 ASP.NET MVC 简介 ASP.NET是一种构建Web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架. 1.1.1 MVC模式 ...
- ASP.NET MVC5高级编程 之 模型
1. 为MVC Music Store建模 Models文件夹(右击) --> 添加 --> 类 为类添加对应的属性: public class Album { public virtua ...
- ASP.NET MVC5 高级编程-学习日记-第三章 视图
开发人员之所以花费大量时间来重点设计控制器和模型对象,是因为在这些领域中,精心编写的整洁代码是开发一个可维护Web应用程序的基础. 3.1 视图的作用 视图的职责是向用户提供用户界面.当控制器针对被请 ...
- ASP.NET MVC5 高级编程-学习日记-第二章 控制器
2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...
- ASP.NET MVC5高级编程 之 Ajax
jQuery不仅支持所有现代浏览器,包括IE.Firefox.Safari.Opera和Chrome等,还可以在编写代码和浏览器API冲突时隐藏不一致性(和错误). 1. jQuery jQuery擅 ...
- 学习《ASP.NET MVC5高级编程》——基架
基架--代码生成的模板.我姑且这么去定义它,在我学习微软向编程之前从未听说过,比如php代码,大部分情况下是我用vim去手写而成,重复使用的代码需要复制粘贴,即使后来我在使用eclipse这样的IDE ...
- 《asp.net mvc3 高级编程》第二章 控制器
一.控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,并且在响应时通常会修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流,输入数据的处理 ...
随机推荐
- 使用python + tornado 做项目demo演示模板
很简单,可是却也折腾了不是时间,走了不少弯路.在此备注记录一下,以供后需. # web_server.py #!/usr/bin/env python # coding=utf-8 import os ...
- jhat中的OQL(对象查询语言)
http://blog.csdn.net/wanglha/article/details/40181767 jhat中的OQL(对象查询语言) 如果需要根据某些条件来过滤或查询堆的对象,这是可能的,可 ...
- oracle查看数据库的字符集
注意如果是从旧的数据库复制,一定要保证字符集使用一模一样的,不然会有很多问题(比如汉字在UTF8占3个字符,在GBK占2个字符,所以设置的列宽度要比原来的大才行,不然就会报值太大的错误) select ...
- SQL Server 2005 不允许远程连接解决方法
刚刚安装的数据库系统,按照默认安装的话,很可能在进行远程连接时报错,通常是错误:“在连接到 SQL Server 2005 时,在默认的设 置下 SQL Server 不允许进行远程连接可能会导致此失 ...
- .NET 文件相关的所有操作
public static class FileSystemHelper { #region 检测指定目录是否存在 /// <summary> /// 检测指定目录是否存在 /// < ...
- context.Request.Files为NULL问题
在实现图片上传功能的时候出现在ashx等处理页面出现context.Request.Files为NULL异常,有几点需要注意: 1.在客户端可以将form用submit提交,如下: <%@ Pa ...
- SELinux配置不当导致httpd无法在非80端口启动
检测是否为selinux导致httpd启动失败,若setenforce 0以后就可以启动,就表示selinux配置不当. 首先本机要支持semanage命令,安装方法网上有. semanage po ...
- ubuntu中VNC的安装配置笔记
使用服务器时,利用远程桌面是非常方便的,否则需要跑到服务器机房操作非常的费事,或者需要远程操作机器是也可以使用,一般的操作系统都会带有远程桌面功能,但是不如第三方的的软件好用,对于linux系统常用的 ...
- php 分享两种给图片加水印的方法
本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考一下本文章的源代码. 方法一:PHP最简单的加水印方法 <?php // http://www.manongjc.com ...
- Grunt 插件使用汇总
最近使用了很多 Grunt 插件,这里把使用 Grunt 中涉及的从开发.代码检查.单元测试.E2E 测试,直到发布所涉及的插件,做一个比较完全的汇总. 环境搭建 1. 创建 Web 前端开发环境 2 ...