[转载]ASP.NET MVC 3.0学习系列文章—Controllers in ASP.NET MVC 3.0 – 爱因斯坦的小脑 – 博客园.
系列文章
ASP.NET MVC 3.0学习系列文章–Razor and ASP.NET MVC 3.0
ASP.NET MVC 3.0学习系列文章—Controllers in ASP.NET MVC 3.0
本部分包含如下几个内容:
1.Introduction
在ASP.NET MVC 3.0中Controller部分新增的功能主要是ActionFilter和ActionResult,个人觉得没有太大的改动。而且相比其它几部分Controller部分的修改不是ASP.NET MVC 3.0的亮点。
2.Global Action Filters
在之前的版本中就有Action Filter的概念。而且默认的它自带了如下几个Action Filter。
这些属性可以添加到某个Action上或者是整个Controller上:
为什么要在ASP.NET MVC 3.0中增加Global Action Filter呢?
有时候,我们在某个Action运行前或者是Action运行后加上某个动作,比如在登录认证完成后,我们需要记录下这个人的这一次登录时间,所以ASP.NET MVC团队在MVC 2中添加了Action Filter功能。
Action filters are custom attributes that provide a declarative means to add pre-action and post-action behavior to specific controller action methods.
但是很多时候,你可能需要在所有的Action执行前都运行某段代码,所以MVC 3提供了一个新的功能,能够让你把Global filter添加到GlobalFilters这个集合中。
来个例子:
我们定义一个CustomActionFilter继承了ActionFilterAttribute类。
自定义的Action Filter可以override四个方法,Action执行时,Action执行后,Result返回时,Result返回后。
因为在ASP.NET MVC 3.0中有Global Filter的加入,所以我们现在可以在Global.asax中注册这个Filter。
上面的Action Filter我们未在任何一个Action前面添加属性,运行下看看:
我们的HomeControllerhome的action运行时,执行了我们定义的Custom Action。
3.Caching Child Actions
ASP.NET MVC 3.0中我们可以在子动作(Child Action)中使用OutputCache属性了。
首先我们来定义一个ChildAction:
对应的添加一个View叫CurrentTime”
因为model是Dynamic类型的,所以我们只需要使用@model DateTime来定义mode。
下面应该是把这个Partical view添加到Index的view中:
运行后:
下面是使用Child Cache属性,我们看看是否两个输出时间相同:
运行结果:
4.The ViewBag
在前面文章中已经介绍过这个了。
5.New Action Results
在ASP.NET MVC 3.0中有新的Action Result:
a. HttpNotFoundResult
b. HttpRedirectResult
c. HttpStatusCodeResult
6.Request Validation
a.使用ValidateInput属性来设置是否当前的Model需要验证:
给model加上这个属性,当你Post数据时,MVC框架就不再自动去验证当前的输入是否合法。
你会看到我这里的Decription上面有个AllowHtml属性,它是ASP.NET MVC 3中新增的,有这个属性的字段,可以从客户端直接输入HTML。。。。但是这个是非常危险的,轻易别使用。我举个例子你就看到这个多牛了:
在Edit页面我们输入一段JavaScript,点击Save:
会弹出Script。。。。但是这个属性可以用来在页面中演示JavaScript的运行。。。。。