让你的视图页面更简洁

我经常听见抱怨说,在使用默认的视图引擎时,页面中总是存在类似于页面声明(page directive)这样烦人的东西。实际上很大程度上这些东西也是可以定制的。ASP.NET组的隐藏大牛之一,David Ebbo(在此致敬),在这方面给予了我一些指点。

首先,让我们来看看修改之前和之后的效果。

噢,这可不是WebForms中View的样子,我知道你会这么说:

我的页面声明(page directive)呢!?所有的Content控件的ID呢!?母版页的声明呢!?OMG,幸亏runat="server"还在,不然我真的要失眠了。

其实ASP.NET提供了很多种方法,可以将这些默认值写入Web.config中。我在这里所做的(你一样可以在ASP.NET MVC和WebForms项目中这样做),只是设定一部分默认值。

拿ASP.NET MVC的项目来说,我打开Views目录下的Web.config文件(注意不要被根目录下的Web.config文件迷惑了)。

这个Web.config是为所有Views提供的。我做了以下更改:

1、设置compilation节点下的defaultLanguage属性为"C#"。
2、设置pages节点下的masterPageFile属性指向"~/Views/Shared/Site.master"。
3、设置pages节点下的pageBaseType属性为"System.Web.Mvc.ViewPage"

下面是我修改完后的Web.config文件(为了看得更清楚一些,我删除了其他的一些节点和属性):

做完这些以后,只要我的View不覆盖这些设置,都不需要再做页面声明(page directive)了。

当然,如果你要使用强类型的View,你需要页面声明来指定ViewPage的类型,但是要做的也只有这么多。

另外不要忘了,你还可以搞定那些丑陋的Register声明,只需要在Web.config中注册自定义控件

你还可以把引入命名空间的,丑陋的Import声明也放进Web.config中

使用了上面的这些技巧,你会得到一个更加清爽和漂亮的View页面。这里所展示的不只是给View页面加入语法糖。更重要的是,控制代码尽量少,并且专注于表现。Rob已经写了一篇关于这方面的文章

遗憾的是,还没有可以将runat="server"也省略掉的方法。你可以把他当做是你高中时的一起混的哥们,虽然老婆不喜欢,但是你们在一起时常能回忆起很多往事。

;-)

希望你喜欢本篇中的这些小技巧,并把它们应用到你的View页面中。说到底,页面的工作不就是让我们的世界看起来美好吗?

本文翻译自Phil Haack的博客,原文Put Your Views (and Pages) On a Diet

 

PS:将命名空间的Import声明加入Web.config带来的好处,不仅是在页面中可以用ClassName代替Namespace.ClassName,甚至在Page Directive中也可以简写,如本来应该写成这样的代码:

<%@ Page Inherits="System.Web.Mvc.ViewPage<XXX.YYY.ZZZ>" %>

可以直接这样写了:

<%@ Page Inherits="System.Web.Mvc.ViewPage<ZZZ>" %>

只要你在Web.config中Import进了XXX.YYY!!

posted @ 2009-08-06 15:27  Halbert Lei  阅读(2943)  评论(13编辑  收藏  举报