理解行为结果
控制器行为返回的事物叫做行为结果,一个行为结果就是控制器行为返回给浏览器请求的响应。
ASP.NET MVC框架支持六个标准类型的行为结果:
1.视图结果(ViewResult):表示HTML和标记。
2.空结果(EmptyResult):表示没有结果。
3.重定向结果(RedirectResult):表示重定向到一个新的URL。
4.重定向到路由结果(RedirectToRouteResult):表示重定向到一个新的控制器行为。
5.JsonResult:表示可以用于AJAX应用程序的JavaScript对象标记结果。
6.内容结果(ContentResult):表示一个文本结果。
这些行为结果都继承自基础行为结果(ActionResult)类。
大多数情况下,控制器行为返回视图结果,例如,清单2中的Index控制器行为返回一个视图结果。
清单2 BookController.vb
Public Class BookController
Inherits System.Web.Mvc.Controller
Function Index()
Return View()
End Function End Class
当一个行为返回一个视图结果时,返回给浏览器的就是HTML,清单2 中的Index()方法返回一个名叫Index.aspx视图给浏览器。
注意清单2 中的Index()行为没有返回ViewResult(),相反,控制器基础类的View()方法被调用,正常情况下,你不用直接返回一个行为结果,相反,你可以调用下面的控制器基础类方法:
1.View:返回一个ViewResult行为结果。
2.Redirect:返回一个RedirectResult行为结果。
3.RedirectToAction:返回一个RedirectToActionResult行为结果。
4.RedirectToRoute:返回一个RedirectToRouteResult行为结果。
5.Json:返回一个JsonResult行为结果。
6.Content:返回一个ContentResult行为结果。
因此,如果你想返回一个视图(View)给浏览器,可以调用View()方法,如果你想将用户重定向到另一个控制器,可以调用RedirectToAction() 方法,例如,清单3中的Details()行为要么显示一个视图,要么重定向到Index()行为,这依赖于Id参数是否有值。
清单3 CustomerController.vb
Public Class CustomerController
Inherits System.Web.Mvc.Controller
Function Details(ByVal Id As Integer?)
If IsNothing(Id)
Then
Return
RedirectToAction("Index")
End If
Return View()
End Function
Function Index()
Return View()
End Function End Class
ContentResult行为结果是特殊的,你可以使用ContentResult行为结果返回一个明文行为结果,例如,清单4中的Index()方法返回一个明文消息而不是HTML。
清单4 StatusController.vb
Public Class StatusController
Inherits System.Web.Mvc.Controller
Function Index()
Return
Content("Hello World!") End Function End Class
当StatusController.Index() 行为被调用时,不会返回一个视图,相反,会返回一个原始文本“Hello World!”给浏览器。
如果控制器行为返回的结果不是一个行为结果,例如,一个日期或一个整数,那么ContentResult中的结果会自动换行,例如,清单5中的WorkController Index()行为被调用时,ContentResult会自动作为一个日期返回。
清单5 WorkController.vb
Public Class WorkController
Inherits System.Web.Mvc.Controller
Function Index() As DateTime
Return DateTime.Now
End Function End Class
清单5中的Index()行为返回一个DateTime对象,ASP.NET MVC框架会将DateTime对象转换成一个字符串,并且在ContentResult中的DateTime值会自动换行,浏览器接收日期和时间的明文。
小结
本文的目的是向你介绍ASP.NET MVC控制器、控制器行为和控制器行为结果的概念,在第一小节中,你学习了如何添加新的控制器到一个ASP.NET MVC项目,接下来,你学习了控制器的公共方法是如何作为控制器行为暴露给所有人的,最后,我们讨论了控制器行为返回的不同类型的行为结果,特别是如何从控制器行为返回一个视图结果、重定向到行为结果和内容结果。
原文:Understanding Controllers, Controller Actions, and Action Results
作者:Stephen Walther