《Pro ASP.NET MVC 3 Framework》学习笔记之二十七【视图1】
2012-04-06 23:45
447 查看
在前面很多的章节里面的,最常用的action result是视图呈现并返回给客户端的ViewResult类型。本章会专注于视图的原理,首先展示MVC框架是如何使用视图引擎处理ViewResults的,包括阐释如何创建一个视图引擎。接着介绍使用Razor视图引擎的一些技术。最后是关于创建和使用部分视图,子actions,以及Razor片段,这些都是涉及高效MVC开发的本质话题。
创建一个自定义视图引擎(Creating a Custom View Engine)
MVC框架包含了两个内置的,功能完善,容易理解的视图引擎:
a.Razor引擎:MVC3里面引入的一个新的视图引擎,具有更加简洁和优雅的语法。
b.ASPX引擎:使用的是webform里面的标签语法"<%..%>",用于维护兼容旧的MVC程序。
这里创建一个自定义的视图引擎的目的是为了阐释请求管道的运行原理以及完善我们对MVC框架运行原理的认识,包含了理解视图引擎在转化一个ViewResult到响应客户端的输出有多少自主性。
视图引擎实现了IViewEngine接口,如下所示:
View Code
记住一点:action调用者轮流去每一个视图引擎寻找视图,等到我们添加视图到集合里面时,它已经包含了标准的Razor视图引擎。为了避免跟其他的视图引擎竞争,我们调用Clear方法移除任何可能已经注册的视图引擎并调用Add方法注册我们自己实现的视图引擎。
添加动态的内容到Razor视图(Adding Dynamic Content to a Razor View)
视图的全部意图就是允许我们将领域模型作为用户接口呈现出来。为了达到这个目的,我们需要添加动态的内容,动态内容是在运行时创建的,并且每一次请求创建的内容都可以不同。这个跟静态内容是相反的,像HTML这些静态的内容在每次请求时都是一样的。添加动态内容的方式有四种:内嵌代码(Inline code),HTML辅助方法(HTML helper methods),部分视图(Partial views),子action(Child actions).下面分别对每一种方式进行介绍:
使用内嵌代码(Using Inline Code)
创建动态内容最简便的方式就是使用内嵌代码——一行或多行以@符合开始的C#代码。这是Razor视图引擎的核心。
内嵌代码与分解关注点:学过ASP.NET WebForms的人可能非常想知道为什么会对内嵌代码如此着迷,毕竟在WebForms里面的约定是尽可能的将代码放在代码隐藏文件里面。这很容易混淆,特别是当我们认为代码隐藏文件常常是对分解关注点的维护时。这个分歧的出现是因为MVC和WebForms对哪一个关注点应该被分解以及分界线应该在哪有不同的概念。WebForms将陈述性的HTML标记和程序逻辑分开,ASPX包含HTML标签,代码隐藏文件包含逻辑。与之相对的是MVC,它是将展示逻辑和应用逻辑分开,控制器和领域模型分别负责应用逻辑和领域逻辑,视图包含展示逻辑。所以内嵌代码更好的适应了MVC框架。Razor句法让我们很容易的创建可维护,可扩展的视图。
内嵌代码功能的灵活性很容易模糊应用程序的边界,并且让分解关注点的思想瓦解。作为一种纪律约束:必须通过某种方式来维护分解关注点的有效性,那就是与MVC设计模式保持一致。当我们着手使用MVC框架时,建议将关注点放在理解功能上。当我们有了更多的经验时,会自然形成将视图和MVC组件的职责分开的感觉。
好了,今天的笔记就到这里,关于这章的笔记在下一篇接着做完。
晚安!
创建一个自定义视图引擎(Creating a Custom View Engine)
MVC框架包含了两个内置的,功能完善,容易理解的视图引擎:
a.Razor引擎:MVC3里面引入的一个新的视图引擎,具有更加简洁和优雅的语法。
b.ASPX引擎:使用的是webform里面的标签语法"<%..%>",用于维护兼容旧的MVC程序。
这里创建一个自定义的视图引擎的目的是为了阐释请求管道的运行原理以及完善我们对MVC框架运行原理的认识,包含了理解视图引擎在转化一个ViewResult到响应客户端的输出有多少自主性。
视图引擎实现了IViewEngine接口,如下所示:
View Code
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new CustomRazorViewEngine()); //ViewEngines.Engines.Insert(0, new DebugDataViewEngine()); //DependencyResolver.SetResolver(new NinjectDependencyResolver()); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); }
记住一点:action调用者轮流去每一个视图引擎寻找视图,等到我们添加视图到集合里面时,它已经包含了标准的Razor视图引擎。为了避免跟其他的视图引擎竞争,我们调用Clear方法移除任何可能已经注册的视图引擎并调用Add方法注册我们自己实现的视图引擎。
添加动态的内容到Razor视图(Adding Dynamic Content to a Razor View)
视图的全部意图就是允许我们将领域模型作为用户接口呈现出来。为了达到这个目的,我们需要添加动态的内容,动态内容是在运行时创建的,并且每一次请求创建的内容都可以不同。这个跟静态内容是相反的,像HTML这些静态的内容在每次请求时都是一样的。添加动态内容的方式有四种:内嵌代码(Inline code),HTML辅助方法(HTML helper methods),部分视图(Partial views),子action(Child actions).下面分别对每一种方式进行介绍:
使用内嵌代码(Using Inline Code)
创建动态内容最简便的方式就是使用内嵌代码——一行或多行以@符合开始的C#代码。这是Razor视图引擎的核心。
内嵌代码与分解关注点:学过ASP.NET WebForms的人可能非常想知道为什么会对内嵌代码如此着迷,毕竟在WebForms里面的约定是尽可能的将代码放在代码隐藏文件里面。这很容易混淆,特别是当我们认为代码隐藏文件常常是对分解关注点的维护时。这个分歧的出现是因为MVC和WebForms对哪一个关注点应该被分解以及分界线应该在哪有不同的概念。WebForms将陈述性的HTML标记和程序逻辑分开,ASPX包含HTML标签,代码隐藏文件包含逻辑。与之相对的是MVC,它是将展示逻辑和应用逻辑分开,控制器和领域模型分别负责应用逻辑和领域逻辑,视图包含展示逻辑。所以内嵌代码更好的适应了MVC框架。Razor句法让我们很容易的创建可维护,可扩展的视图。
内嵌代码功能的灵活性很容易模糊应用程序的边界,并且让分解关注点的思想瓦解。作为一种纪律约束:必须通过某种方式来维护分解关注点的有效性,那就是与MVC设计模式保持一致。当我们着手使用MVC框架时,建议将关注点放在理解功能上。当我们有了更多的经验时,会自然形成将视图和MVC组件的职责分开的感觉。
好了,今天的笔记就到这里,关于这章的笔记在下一篇接着做完。
晚安!
相关文章推荐
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.2.MVC的主要工具-Ninject
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.8.SportsStore:管理
- 《Pro ASP.NET MVC 3 Framework》学习笔记之十六【示例项目SportsStore】
- Pro ASP.NET MVC 5 Framework.学习笔记.6.3.MVC的必备工具
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十二【Controllers和Actions】
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.9.SportsStore:Securing the Administration Features
- Pro ASP.NET MVC 5 Framework.学习笔记.6.4.MVC的必备工具
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.3.MVC的主要工具-单元测试
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.5.SportsStore一个真实的程序
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.6.SportsStore:导航
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.12.ASP.NET MVC3的细节:URLs,Routing和Areas
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.10.SportsStore:上传图片
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十四【Controllers和Actions】
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十一【Area及URL架构的最佳实践】
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十五
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.11.ASP.NET MVC3的细节:概览MVC项目
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.1.主要语言特性
- 《Pro ASP.NET MVC 3 Framework》学习笔记之二十【URL和Routing】
- 【Pro ASP.NET MVC 3 Framework】.学习笔记.4.MVC的主要工具-使用Moq
- 《Pro ASP.NET MVC 3 Framework》学习笔记之六【C#部分特性】