一、View引擎中的View
ASP.NET MVC为我们提供了两种View引擎,它们针对不同的动态View设计方式。一种是传统的Web Form引擎,由于该引擎下View的设计与我们定义.aspx页面一致,又称为ASPX引擎。另外一种则是本书默认采用同时也是推荐使用的Razor引 擎。在两种View引擎的工作机制之前,有一个必须要知道的问题:View如何表示?提到View,很多ASP.NET MVC的开发人员可能首先想到的就是定义UI界面的.aspx文件(Web Form引擎)或者.cshtml/.vbhtml文件(Razor引擎)。其实对于View引擎来说,View是一个实现了IView接口类型的对象。如下面的代码片断所示,IView的定义非常简单,仅仅具有唯一的Render方法根据指定的View上下文和TextWriter对象实现对View的呈现。
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
IView用于呈现View的Render方法具有两个参数,一个是表示View上下文的ViewContext对 象。通过上面的代码片断可以看出ViewContext是ControllerContext的子类,用于表示状态数据的ViewData、 ViewBag和TempData对应着ControllerBase的同名属性。也就是说当执行从Controller的某个Action方法返回的 ViewResult的时候,通过创建的ViewContext保持的状态数据直接来源于Controller对象。
ViewContext 具有两个布尔类型属性ClientValidationEnabled和UnobtrusiveJavaScriptEnabled表示是否支持客户端验 证和Unobtrusive JavaScript。默认的情况下着两个属性通过同名的AppSettings配置项进行设置。如果应用不具有对应的配置,两个属性默认值为 False。
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
配 置的范围是针对整个Web应用而言的,这个全局属性还可以通过HtmlHelper的同名静态属性进行设置。值得一提的是,ASP.NET MVC 允许我们针对某个View开启或者关闭对客户端验证和UnobtrusiveJavaScriptEnabled的支持,而这可以通过当前View的 HtmlHelper的实例方法EnableClientValidation/EnableUnobtrusiveJavaScript来实现。
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
接 口IView的Render方法的第二个参数是一个TextWriter对象。对于该方法来说,只要我们将内容写入该TextWriter即完成了针对相 关内容在View上的呈现,因为在调用Render方法的时候,作为该参数的是当前HttpResponse的Output属性表示的 TextWriter。
二、ViewEngine
View引擎的核心是一个ViewEngine对象,它实现了IViewEngine接 口。如下面的代码片断所示,IViewEngine定义了两个FindView和FindPartialView方法根据指定的Controller上下 文、View名称和布局文件名称去获取对应的View和Partial View,两个方法中具有一个布尔类型的参数useCache表示是否启用缓存。另一个方法ReleaseView用于释放View对象。
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
FindView 和FindPartialView方法返回的并不是实现了IView接口的类型的对象,而是一个类型为 System.Web.Mvc.ViewEngineResult对象。如下面的代码片断所示,ViewEngineResult的只读属性View和 ViewEngine属性表示找到的View对象和表示自身的ViewEngine对象。在成功获取到对应View的情况下这两个属性会通过构造函数进行 初始化。如果没有找到相应的View,则将一个搜寻位置列表传入另一个构造函数创建一个ViewEngineResult,而只读属性 SearchedLocations表示的就是这么一个搜寻位置列表。
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
发表回复