ViewResult与ActionResult的区别

8

如何决定是使用ActionResult还是ViewResult?我知道ActionResult是ViewResult的抽象类,但我见过一些例子同时使用这两种类型来实现同样的功能。是否有区别呢?


1
可能是ViewResult()和ActionResult()之间的区别的重复问题。 - whoah
大家好,我是一个编程新手。请问为什么要使用Constrict,而不直接使用ActionResult代替ViewResult呢?这是出于安全原因还是程序泄漏的原因吗? - user8280126
3个回答

20

ActionResult是基类型,而ViewResultActionResult的子类型。

当您设置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

如果您确定您的操作方法将返回某个视图页面,则可以使用ViewResult。但是,如果您的操作方法可能具有不同的行为,例如呈现视图或执行重定向。您可以使用更通用的基类ActionResult作为返回类型。

更多详情请参见:

http://forums.asp.net/t/1448398.aspx

您也可以在此处查阅:

http://www.slideshare.net/umarali1981/difference-between-action-result-and-viewresult


没想到有这么多的返回类型!Jazakallah, 目前在asp.net mvc 5中,更完整的列表在MSDN - ActionResult Class中。 - Irf
大家好,我是一名编程新手。为什么要使用Constrict,而不直接使用ActionResult代替ViewResult?这是出于安全性方面的考虑还是程序泄漏的原因呢? - user8280126
在使用ActionResult也没有什么坏处,你可以使用它。 - Ehsan Sajjad

0
如果您使用视图结果,则必须返回一个视图,如下所示:
public 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的更多信息,请访问链接


0

首先要了解——ActionResult和ViewResult基本上是方法(即MVC中的Action)的返回类型。

其次,它们的区别在于——ActionResult可以返回任何类型的结果,而ViewResult只能返回视图类型的结果。


ActionResult和ViewResult之间的区别 - Manikandan Joe Nadar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接