ASP.NET MVC实例和新RC版本中视图方面的改进

开发 后端
本文对www.asp.net网站上推出的ASP.NET MVC设计陈列室以及即将推出的ASP.NET MVC RC版本的一些功能做了介绍,希望可以给你带来帮助。

我们在www.asp.net网站上推出了一个新的ASP.NET MVC 设计陈列室。这个设计陈列室里陈列了你可以下载和轻易使用在你的ASP.NET MVC应用中的免费HTML设计模板。每个设计模板中包括了一个Site.master文件,一个CSS样式表文件,也许还有一套图片,用户控件,以及支持它们的辅助方法等。

陈列室允许你在线预览每个设计,以及下载一个你可以解出和集成进你的网站的模板.zip版本。该陈列室允许任何人在创作共用许可(creative commons license)下创建和提交新的设计。访客可以对它们进行投票,提供反馈。最受欢迎的设计会在陈列室的顶部显示。

我们认为这会给开发人员提供一个很有用的方式来更轻松地创建有吸引力的,与标准兼容的网站。希望还能鼓励大家创建和共享可轻易为他人重用的设计。

即将推出的最终版候选版本中的View方面的改进

说到UI这个话题,我想我也应该与大家分享即将推出的ASP.NET MVC最终版候选版本(Release Candidate,简称RC)中的一些与视图有关的改进的细节。除了缺陷修补外,RC版本还融合了若干个特定于视图的新功能和来自社区的建议。

不需要后台代码文件的视图

基于许多人的反馈,我们决定做一个变动,这样MVC视图文件在默认情形下不再拥有后台代码文件。这个变动有助于强化视图在MVC世界中的目的(视图意在纯粹的显示,不该包含任何与显示无关的代码),去掉项目中没被使用的文件(对大多数人来说):

在ASP.NET MVC Beta版本中,开发人员可以通过在视图中的Inherits(继承)属性上使用泛型的CLR句法来除去后台代码文件,但这个CLR句法,说得轻一点的话,非常难以发现而且非常难用。ASP.NET MVC开发团队结合了ASP.NET中现有的几个扩展性功能,将在ASP.NET RC版本中,在Inherits属性中提供一个标准VB/C#语言句法:

不使用后台代码文件的另一个好处是,在你将视图文件加到项目中时,你会马上得到intellisense。在Beta版本中,你需要在创建视图后做一次编译才能在其中得到代码intellisense。RC版本将使得添加和立刻编辑视图的流程免去了编译之累,变得更加紧凑。

#p#

视图的顶级Model属性

在ASP.NET MVC的早期版本中,你使用ViewData.Model属性来访问传给视图的强类型的模型对象:

上面的句法还是可用的,虽然现在ViewPage上还有一个顶级的Model属性可为你所用:

这个属性的作用跟先前的代码例子是一样的,它主要的好处在于它允许你编写的代码更加简明。

HTML/AJAX辅助对象现在允许表达式句法

有一个不少人都提出的要求是,在使用视图的HTML和AJAX辅助对象时,在指称Model时使用强类型表达式的句法(而不是字符串)的能力。

在ASP.NET MVC Beta版本中,这是不可能的,因为HtmlHelper和AjaxHelper辅助类并没有在它们的签名中呈示模型的类型,所以大家需要建造直接基于ViewPage基类的辅助方法才能达成这个目的。ASP.NET MVC RC 版本引进了新的HtmlHelper和 AjaxHelper 类型,是在ViewPage 基类上呈示的。这些类型现在允许任何人建造使用了表达式句法的强类型HTML和AJAX辅助扩展来指称View的模型。

例如,我可以使用下面的代码建造一个(非常简单的)强类型TextBox辅助方法:

然后可以这样,在我的任意一个视图中,用它来绑定一个Product模型对象:

Visual Studio将在源代码编辑器中操作View的模型时,以这种方式对强类型的表达式句法提供完整的intellisense:

注:核心ASP.NET MVC V1程序集中的HTML辅助扩展还将使用现有的句法(不是基于表达式的),我们正计划在MVCFutures程序集中加入基于表达式的版本。当然,你还可以使用字符串或者强类型的表达式,来添加你自己的辅助方法。所有这些内置的辅助方法都是可以去掉的(因为他们是扩展方法),如果你要用自己的版本来替换或覆盖它们的话。

#p#

Scaffolding支持

ASP.NET MVC RC版本还包括了在Visual Studio中使用新的ASP.NET MVC "Add View"命令创建视图时的自动的"UI scaffolding" 支持。这个scaffolding支持将允许针对任何.NET 类型或对象的自动的视图生成,意味着它对POCO类,LINQ to SQL, LINQ to Entities, NHibernate, SubSonic, LLBLGen Pro,或者任何其他对象模型都工作。Scaffolding引擎使用了反射来获取View的模型类型的公开接口,然后将它们传给scaffolding模板,在生成的视图中填充基于它的合适HTML标识。

例如,假定我们有一个ProductsController类,想创建一个它的"Edit" action,来显示特定产品的编辑视图。使用RC版本,我们可以象这样,在我们的"Edit" action方法中右击,选择"Add View"上下文菜单命令:

然后在"Add View" 对话框中,我们可以表示我们将把Product类型传给我们的View:

我们可以表示我们要创建一个"Empty" 视图模板(象上面那样),或者表示我们要VS针对我们提供的Product对象自动提供一个"Edit"表单视图的基本架子:

如果我们选择"Edit" 模板, VS会自动为我们生成一个文件,该文件含有合适的HTML和验证辅助方法来生成一个可编辑的表单视图:

然后我们可以运行应用,马上得到一个编辑界面:

#p#

然后我们可以进去,将生成的edit.aspx文件做任意改动。

我们发布的scaffolding系统的一个非常棒的东西是,它是使用Visual Studio的内置T4代码生成系统实现的(Scott Hanselman在这里有一篇非常好的相关博客)。随ASP.NET MVC发布的"List(列表)", "Edit(编辑)", "Create(创建)" and "Details(细节)" 模板可以做完全定制,或者用你自己的T4模板做替换(或者从ASP.NET MVC设计陈列室下载)。所以,如果你自己有特别的方式生成HTML的话,或者想要使用自定义的HTML辅助类(譬如,基于强类型表达式的辅助类),那你可以更新默认的模板,然后scaffolding系统之后就会使用它们。

我们计划允许模板可以在整个机器的层次,以及每个项目的层次上被置换(这样,你可以在源码控制中签入特定于应用的scaffolding模板,在团队成员间共享)。

编辑视图的MSBuild任务

在默认情形下,当你编译ASP.NET MVC项目时,它会编译项目中除了视图文件中代码以外的所有代码。在ASP.NET MVC Beta中,你想要编译视图的话,你需要编写你自己的 MSBuild任务。ASP.NET MVC RC版本现在包含了一个内置的 MSBuild 任务,你可以用它来将视图包括成为项目编译过程的一部分。它会核实应用中所有视图和母版页的句法和行内代码,如果遇到问题的话,它会给你编译错误信息。

但因为性能的缘故,我们不建议在开发期间运行它来做快速编译,但将它加到特定的编译配置(例如,staging和部署)或者在与 Build 或 CI (连续集成)服务器一起使用时是非常方便的。

即将推出的ASP.NET MVC RC版本的其他一些功能

上面是RC版本中一些特定于视图的功能的简短列表。

在RC版本中,还有许多其他的功能和要求,这些包括:IDataErrorInfo支持,允许模型汇报验证错误信息,以及更丰富的错误验证扩展性以允许你使用自己的方式来汇报模型验证信息到ModelBinders中(IDataErrorInfo支持是建造在这个的基础之上的);新的FileResult和JavaScriptResult的ActionResult 类型(允许你更轻松地下载文件和可执行的JavaScript到浏览器中);内置的 jQuery -vsdoc intellisense支持;重构了的AccountController支持,以促成更简单的表单登录场景的单元测试和扩展性;各种各样的项目模板改进,随处可见的众多扩展性;诸多的缺陷修补等。

【编辑推荐】

  1. 新ASP.NET 3.5图表控件简介
  2. ASP.NET学习路线图
  3. ASP.NET应该遵守的9条代码编写规范
责任编辑:杨鹏飞 来源: cott Guthrie 博客
相关推荐

2010-03-04 08:49:01

VS 2010 RCASP.NET MVC

2009-04-01 12:00:43

ASP.NETMVC

2009-07-28 13:06:45

ASP.NET MVC

2009-09-04 16:28:05

ASP.NET 4.0

2011-01-15 23:07:59

2009-07-24 13:20:44

MVC框架ASP.NET

2009-07-28 15:08:50

MVC三层架构实例

2010-10-12 09:52:02

ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2012-05-09 13:29:42

ASP.NET

2012-06-26 10:24:51

Asp.Net框架Razor

2021-06-22 16:59:56

微软.NETC# 软件开发

2009-07-20 16:44:56

ASP.NET MVCIValueProvi

2010-08-16 09:14:37

ASP.NET MVC

2011-04-18 09:35:59

ASP.NET MVC

2010-10-08 14:32:32

ASP.NET MVCNuPack

2009-07-23 14:31:20

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC
点赞
收藏

51CTO技术栈公众号