如何决定是使用ActionResult还是ViewResult?我知道ActionResult是ViewResult的抽象类,但我见过一些例子同时使用这两种类型来实现同样的功能。是否有区别呢?
如何决定是使用ActionResult还是ViewResult?我知道ActionResult是ViewResult的抽象类,但我见过一些例子同时使用这两种类型来实现同样的功能。是否有区别呢?
ActionResult
是基类型,而ViewResult
是ActionResult
的子类型。
当您设置Action的返回类型为ActionResult
时,您可以返回其任何子类型,例如Json、PartialView、View、RedirectToAction。
但是当您在此情况下使用子类型,如ViewResult
,则将限制您的操作仅返回该子类型作为结果,即View。
当您使用ActionResult
作为返回类型时,您可以从Action返回以下内容(这意味着以下是ActionResult的子类型),如forums.asp.net所述:
ActionResult是一种通用结果类型,可以具有多个子类型(来自"ASP.NET MVC 1.0 Quickly"书):
a) ViewResult
将指定的视图呈现到响应流中
b) PartialViewResult
将指定的部分视图呈现到响应流中
c) EmptyResult
基本上什么也不做;给出一个空响应
d) RedirectResult
对指定的URL执行HTTP重定向
e) RedirectToRouteResult
根据给定的路由数据,基于路由引擎确定HTTP重定向到URL
f) JsonResult
将给定的ViewData对象序列化为JSON格式
g) JavaScriptResult
返回可以在客户端上执行的一段JavaScript代码
h) ContentResult
在不需要视图的情况下将内容写入响应流中
i) FileContentResult
将文件返回给客户端
j) FileStreamResult
将由流提供的文件返回给客户端
k) FilePathResult
将文件返回给客户端
如果您确定您的操作方法将返回某个视图页面,则可以使用ViewResult。但是,如果您的操作方法可能具有不同的行为,例如呈现视图或执行重定向。您可以使用更通用的基类ActionResult
作为返回类型。
更多详情请参见:
http://forums.asp.net/t/1448398.aspx
您也可以在此处查阅:
http://www.slideshare.net/umarali1981/difference-between-action-result-and-viewresult
ActionResult
也没有什么坏处,你可以使用它。 - Ehsan Sajjadpublic ViewResult MyView ()
{
return View();
}
如果你将它标记为Action结果,你可以返回各种结果,例如
public ActionResult MyView ()
{
//can return view
//can return partial view
//can return json
//can return javascript
// redirect to another action
// and many more :)
}
作为面向对象编程的基础,总是编写抽象代码而不是具体实现,因此使用ActionResult总是一个加分项。
有关ActionResult的更多信息,请访问链接。
首先要了解——ActionResult和ViewResult基本上是方法(即MVC中的Action)的返回类型。
其次,它们的区别在于——ActionResult可以返回任何类型的结果,而ViewResult只能返回视图类型的结果。