《ASP.NET MVC 5 高级编程》html
========== ========== ==========
[做者] (美) Jon Galloway (美) Brad Wilson (美) K. Scott Allen (美) David Matson
[译者] (中) 孙远帅
[出版] 清华大学出版社
[版次] 2015年02月 第1版
[印次] 2015年02月 第1次 印刷
[订价] 59.80元
========== ========== ==========jquery
【第01章】 程序员
(P001) web
证实软件框架和模式价值最好的方法就是展现它们在实际场景中的应用。ajax
(P007) 编程
虽然 ASP.NET API 包含在 ASP.NET MVC 4 中,但它能够单独使用。事实上,它与 ASP.NET 不存在任何依赖关系,而且能够自托管 —— 也就是说,独立于 ASP.NET 和 IIS 。浏览器
(P014) 缓存
MVC 5 是彻底 bin 部署的,这意味着全部必要的程序集都包含在应用程序的 bin 目录中。只要服务器上有 .NET 4.5 ,就能够进行安装。安全
【第02章】 服务器
(P023)
URL 并不与存储在 Web 服务器磁盘上的文件有直接对应关系,而是与控制器类的方法有关。
路由子系统在前面,以后才是控制器。
(P024)
MVC 提供的是方法调用结果,而不是动态生成的 (又名脚本) 页面。
(P025)
在 ASP.NET MVC 中,每一个请求都被路由到控制器的一个方法 (又称操做),该控制器全权负责解释这些请求,若有必要,还要操纵模型,而后选择一个视图反馈给用户。
(P034)
利用方法 HttpUtility.HtmlEncode 来预处理用户输入,这样就能阻止用户用连接向视图中注入 JavaScript 代码或 HTML 标记。
ASP.NET MVC 的默认路由约定,就是将操做方法名称后面 URL 的这个片断做为一个参数,该参数的名称为 ID 。
【第03章】
(P036)
视图实际上就是应用程序的 “大使” 。
(P037)
视图老是被控制器渲染,由于控制器为它提供了要渲染的数据。
(P039)
ViewBag 具备局限性,可是若是只是向视图传递少许数据,它仍是颇有用的。
(P042)
能够从控制器向视图传递一个在两端都是强类型的模型对象。
若是不想输入模型类型的彻底限定类型名,可以使用 @using 关键字声明。
对于在视图中常用的名称空间,一个较好的方法就是在 Views 目录下的 web.config 文件中声明。
(P045)
显示 “Add View” 对话框最简单的方法就是在操做方法上右击。
(P049)
Razor 中的核心转换字符是 “at” 符号 (@) 。这个单一字符用作 “标记-代码” 的转换字符,有时也反过来用作 “代码-标记” 的转换字符。
(P053)
有些状况下,须要显式地渲染一些不该该采用 HTML 编码的值,这时能够采用 Html.Raw 方法来保证该值不被编码。
(P054)
能够用 “@@” 来编码 “@” 以达到显示 “@” 的目的。
(P055)
@RenderBody 是一个占位符,用来标记使用这个布局的视图将渲染它们的主要内容的位置。
【第04章】
(P062)
在 Visual Studio 中,既可使用 Build | Build Solution 菜单项,也可使用键盘快捷键 Ctrl + Shift + B 来编译应用程序。
(P063)
基架对于建立应用程序来讲不是不可或缺的,可是利用基架会为应用程序开发节省不少时间。
(P079)
浏览器会自动收集用户在表单中输入的全部信息并将这些值 (及其相关的 name 属性值) 放在请求中一块儿发送。
【第05章】
(P086)
action 特性用以告知 Web 浏览器信息发往哪里,因此 action 就瓜熟蒂落地包含一个 URL 。
当用户使用 HTTP GET 请求提交时,浏览器会提取表单中输入元素的 name 特性值及其相应的 value 特性值,并将它们放入到查询字符串中。
若是不想让浏览器把值放入查询字符串中,而是想放入 HTTP 请求的主体中,就能够给 method 特性赋值 post 。
(P087)
一般状况下,在 Web 应用程序中, GET 请求用于读操做, POST 请求用于写操做 (一般包括更新、建立和删除) 。
(P089)
能够经过视图的 Html 的属性调用 HTML 辅助方法。相应地,也能够经过 Url 属性调用 URL 辅助方法,经过 Ajax 属性调用 AJAX 辅助方法。全部这些方法都有一个共同的目标 : 使视图编码变得容易。
(P091)
在 ASP.NET MVC 框架的重载版本中,几乎每个 HTML 辅助方法都包含 htmlAttributes 参数。
全部的 HTML 辅助方法在渲染 HTML 时会将属性名中的下划线转换为连字符。
(P093)
ValidationSummary 辅助方法能够用来显示 ModelState 字典中全部验证错误的无序列表。
(P095)
TextBox 辅助方法渲染一个 type 特性为 text 的 input 标签。咱们通常利用 TextBox 辅助方法接收用户自由形式的输入。
(P096)
label 的做用就是为其余输入元素显示附加信息,这样能够为用户提供人性化的界面,从而加强应用程序的可访问性。
label 的 for 特性应该包含相关输入元素的 id 。
若是用户单击 label ,那么浏览器会把焦点传送给相关的输入控件。
(P097)
当 ModelState 字典中的某一特定字段出现错误时,可使用 ValidationMessage 辅助方法来显示相应的错误提示信息。
(P098)
辅助方法提供了对 HTML 细粒度控制的同时带走了构建 UI (要在合适的位置显示控件、标签、错误信息和值) 的乏味工做。
在 ViewBag 对象中的全部值也能够经过 ViewData 获得。
(P099)
在 id 特性中包含 (.) 是非法的。
若是没有有效的 id 特性,就没法执行带有 JavaScript 库 (如 jQuery) 的客户端脚本。
(P100)
辅助方法在查找强类型模型对象以前,会首先查看 ViewBag 。
(P101)
通常状况下,可为处理模型数据的每一个辅助方法找到一个与其对应的强类型方法。
(P102)
ModelState 是模型绑定的副产品,而且存储模型绑按期间检测到的全部验证错误,以及用户提交用来更新模型的原始值。
(P104)
CheckBox 辅助方法是惟一一个渲染两个输入元素的辅助方法。
ActionLink 辅助方法可以渲染一个超连接 (锚标签) ,渲染的连接指向另外一个控制器操做。
当连接的操做所在控制器与用来渲染当前视图的控制器同样时,只须要指定操做的名称。
当须要一个指向不一样控制器操做的连接时,可经过 ActionLink 方法的第三个参数来指定控制器名称。
(P105)
尽管 RouteLink 辅助方法和 ActionLink 辅助方法遵循相同的模式,可是 RouteLink 只能够接收路由名称,而不能接收控制器名称和操做名称。
URL 辅助方法与 HTML 的 ActionLink 和 RouteLink 辅助方法类似,但它不是以 HTML 标记的形式返回构建的 URL ,而是以字符串的形式返回这些 URL 。
(P106)
Content 辅助方法特别有用,由于它能够把应用程序的相对路径转换成绝对路径。
ASP.NET MVC 5 使用的是 Razor 的第三个版本,波浪号当出如今 script 、 style 和 img 元素的 src 特性时就会被自动解析。
RenderPartial 辅助方法与 Partial 很是类似,但 RenderPartial 不是返回字符串,而是直接写入响应输出流。出于这个缘由,必须把 RenderPartial 放入代码块中,而不能放在代码表达式中。
【第06章】
(P116)
每一个验证特性都容许传递一个带有自定义错误提示信息的参数。
(P117)
默认状况下,ASP.NET MVC 框架在模型绑定时执行验证逻辑。
在操做方法带有参数时,就会隐式地执行模型绑定。
也能够利用控制器的 UpdateModel 或 TryUpdateModel 方法显式地执行模型绑定。
【第07章】
(P129)
身份验证是指经过使用某种形式的登陆机制来核实用户的身份。
受权验证是用来核实登陆站点的用户是否在他们的权限内执行操做。
Authorize 特性不带任何参数,只要求用户以某种角色身份登陆网站。
(P133)
Authorize 特性是一个过滤器,也就是说,它能先于相关控制器操做执行。
(P137)
全局过滤器只针对 MVC 控制器操做,记住这一点很重要。它不能保障 Web Forms 、 静态内容或其余 ASP.NET 处理程序的安全。
(P140)
技术上讲,设计 OAuth 协议是出于受权的目的,可是该协议经常被用来进行身份验证。
(P150)
Html.Encode 是程序员最好的 “朋友” 。
(P161)
防护重复提交攻击的最简单方法就是,使用 [Bind] 特性显式地控制须要由模型绑定器绑定的属性。
[Bind] 特性既能够放在模型类上,也能够放在控制器操做参数中。
(P162)
避免直接绑定到数据模型也是有效防护重复提交攻击的一种方式。它经过使用一个视图模型 (View Model) ,只缓存容许用户设置的属性来阻止攻击。
【第08章】
(P171)
ASP.NET MVC 5 中主要的 Ajax 特性要么是基于 jQuery 构建,要么是扩展的 jQuery 特性。
(P172)
jQuery 擅长在 HTML 文档中查找、遍历和操纵 HTML 元素。一旦找到元素, jQuery 就能够方便地在其上进行操做。
jQuery 函数对象能够用来访问 jQuery 特性。
(P173)
当传递一个函数做为第一个参数时, jQuery 就会假定这个函数是要在浏览器完成构建 (由服务器提供的) HTML 页面中的文档对象模型 (Document Object Model , DOM) 后当即执行,换句话说,这个函数在从服务器加载完 HTML 页面以后执行。
jQuery 利用 JavaScript 的函数式编程特性,常常把建立的或传递的函数做为 jQuery 方法的参数。
(P174)
选择器是指传递给 jQuery 函数的、用来在 DOM 中选择元素的字符串。
jQuery 选择器的语法正是派生于 CSS 3.0 选择器的语法,并在其基础上作了一些补充。
jQuery 的 on 方法 (以及对应的 off 方法,用于取消订阅事件) 是在 jQuery 1.7 中引入的,用于为事件绑定提供一个统一的 API 。 on 方法取代了原来的 bind 、 live 和 delegate 方法;事实上,若是查看源代码,可看到 bind 、 live 和 delegate 方法只是将调用传递给了 on 方法。
(P175)
一旦选择了一些 DOM 元素或是在一个事件处理程序内, jQuery 就能够很容易地操纵页面上的元素,读取或设置它们的特性值,添加或移除它们的 CSS 类等。
jQuery 包含了向 Web 服务器回发异步请求所需的全部功能。能够用 jQuery 来生成 POST 请求或 GET 请求,而且当请求完成 (或出现错误) 时 jQuery 会发出通知。
(P182)
必须引用 jquery.unobtrusive-ajax.js 脚本,才能让 Ajax 辅助方法的 Ajax 功能生效。若是在使用 Ajax 辅助方法时发生问题,这时应该首先检查的地方。
能够把脚本引用添加到应用程序的 _Layout 视图中,也能够仅添加到使用 Ajax 辅助方法的视图中。除非在网站中发出大量 Ajax 请求,不然建议仅把脚本引用添加到单独的视图中。
(P196)
jQuery UI 多是最流行的 jQuery 插件集合,也是最流行的 NuGet 包之一。
jQuery UI 是一个包含效果和小部件的 jQuery 插件。与全部插件相似,它紧密地集成了 jQuery ,而且扩展了 jQuery 中的 API 。
【第09章】
(P215)
在操做方法级别指定路由特性时,会覆盖控制器级别指定的任何路由特性。
(P223)
特性路由直接绑定到方法和控制器,而不是仅指定名称,这意味着它们更加精确。
(P224)
只须要记住,除非路由提供了 controller 和 action 参数,不然 MVC 不知道为 URL 运行哪些代码。
【第11章】
(P272)
应用程序频繁地使用 HTTP 和 JSON 做为通讯渠道访问主页。当今的应用程序若是不能提供某种形式的远程访问 API 和/或 手机应用,就不能认为它已经 “完成” 。
ASP.NET MVC 在接收表单数据生成 HTML 方面功能很是强大; ASP.NET Web API 在接收和生成像 JSON 和 XML 等结构化数据方面功能很是强大。
(P273)
Web API 直接把结果模型对象做为响应来渲染。
(P283)
自托管和 Web 托管之间的主要区别在于路由的运行时刻 : 对于 Web 托管,ASP.NET 运行路由很是早;但在自托管情形中, Web API 运行路由的时刻就很是晚。
【第12章】
(P290)
HTML 应用程序,也与人称之为单页应用程序或 SPA (Single Page Application) ,是一个复杂的事物。
管理复杂性的技术一般都是建立一个能够隐藏复杂性的框架。
(P291)
为何要在客户端使用模型、视图和控制器呢?其实和服务器端使用的缘由同样 —— 维持代码的顺序,把不一样功能分在不一样的抽象中。
Web API 模板也有 ASP.NET MVC 支持,但只提供一个首页做为起始点。对于应用程序的需求,这样作是很完美的。
(P293)
Angular 核心指令都有一个 “ng” 前缀,这里 “ng” 便是 Angular 的简写。
“ng-app” 是 Angular 的应用程序引导指令。
“ng-app” 告知 Angular 跳入并初始化应用程序,并寻找其余内部指令和模板来控制 DOM 节,这一过程一般被称做编译 DOM 。
(P298)
Angular 控制器主要用来管理 DOM 节,构建模型。只要与之关联的 DOM 区域仍在展示, Angular 控制器就是有状态的、存活的。
【第13章】
(P321)
ASP.NET MVC 框架充分利用了扩展方法。大部分用来在视图中生成表单的 HTML 辅助方法都是 HtmlHelper 、 AjaxHelper 或 UrlHelper 类的扩展方法。
(P322)
依赖注入的最多见形式是构造函数注入 (constructor injection) 。
(P323)
属性注入 (property injection) 是一种不太常见的依赖注入方式。
(P324)
依赖注入容器即是使依赖解析变得简单的一种方式。依赖注入容器是一个能够做为组件工厂使用的软件库,它能够自动检测和知足里面元素的依赖需求。依赖注入容器 API 的使用接口看起来很像服务定位器,由于请求其执行的主要操做将根据类型提供一些组件。
(P329)
视图引擎的主要任务是把视图的名称转换为视图实例。
【第14章】
(P343)
ASP.NET 核心基础结构主要由 IHttpModule 和 IHttpHandler 接口,以及 HttpRequest 和 HttpResponse 等类的 HttpContext 层次结构组成。这些也是全部 ASP.NET 构建的基础类,不管是 Web Forms 、 MVC 仍是 Web Pages 都是在其上构建。
【第15章】
(P366)
HTML 和 Ajax 辅助方法能够访问 ViewContext ,由于它们只能从视图中调用,而 URL 辅助方法能够访问 ControllerContext ,由于它们既能够从控制器中调用,也能够从视图中调用。
【第16章】
(P395)
默认基架器使用 Text Template Transformation (一般称为 T4) 生成代码。 T4 是一个集成到 Visual Studio 中的代码生成器引擎。
(P423)
使用同步管道的指导原则以下 :
1. 操做简单或者能在短期内执行完毕;
2. 简单性和可测试性是重要的;
3. 操做是 CPU 密集型,而非 IO 密集型;
使用异步管道的指导原则以下 :
1. 测试结果代表阻塞操做是站点性能的瓶颈;
2. 并行性比代码简单更重要;
3. 操做是 IO 密集型,而非 CPU 密集型;
把一个操做转换为一个异步操做的一些要求 :
1. 操做方法必须使用 async 修饰符标记为异步;
2. 操做必须返回 Task 或 Task<ActionResult> ;
3. 方法中的任何异步操做使用 await 关键字挂起操做,直到调用完成;