ViewResult V / S ActionResult

时间:2014-07-07 06:19:19

标签: asp.net-mvc asp.net-mvc-3

如何决定是使用ActionResult还是ViewResult?我知道ActionResult是一个以ViewResult作为子类型的抽象类,但我已经看到了将这两个用于相同功能的示例。是否存在区分它们的东西?

3 个答案:

答案 0 :(得分:19)

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

当您设置Action的返回类型ActionResult时,您可以返回它的任何子类型,例如 Json,PartialView,View,RedirectToAction

但是当你在这种情况下使用子类型ViewResult时,你的行动就是它只返回子类型作为结果,在这种情况下是查看

当您使用ActionResult作为返回类型时,您可以从Action返回以下内容(这意味着以下是 ActionResult 的子类型),如 forums.asp中所述。净

  
    

ActionResult 是一种通用结果类型,可以有多种子类型(来自" ASP.NET MVC 1.0 Quickly" Book):

         

a) ViewResult

         

将指定的视图呈现给响应流

         

b) PartialViewResult

         

将指定的部分视图呈现给响应流

         

c) EmptyResult

         

基本上什么都不做;给出空响应

         

d) RedirectResult

         

执行HTTP重定向到指定的URL

         

e) RedirectToRouteResult

         

根据给定的路由数据

执行HTTP重定向到由路由引擎确定的URL          

f) JsonResult

         

将给定的ViewData对象序列化为JSON格式

         

g) JavaScriptResult

         

返回一段可以执行的JavaScript代码     客户

         

h) ContentResult

         

将内容写入响应流而无需视图

         

i) FileContentResult

         

返回到客户端的文件

         

j) FileStreamResult

         

将一个文件夹返回给客户端,该文件由Stream提供

         

k) FilePathResult

         

返回到客户端的文件

  

何时使用ViewResult

如果您确定自己的操作方法会返回某些查看页面,则可以使用 ViewResult 。但是,如果您的操作方法可能具有不同的行为,例如渲染视图或执行重定向。您可以使用更通用的基类 ActionResult 作为返回类型。

更多详情:

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

你也可以参考:

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

答案 1 :(得分:0)

如果您使用查看结果,则必须返回类似

的视图
public ViewResult MyView ()
{
   return View();
}

如果您将其标记为动作结果,则可以返回各种结果,如

public ActionResult MyView ()
{
   //can return view
   //can return partial view
   //can return json
   //can return javascript
   // redirect to another action
   // and many more  :)
}

作为总是编写抽象代码的OOPS的基础,而不是具体的ActionResult总是可以使用。

有关ActionResult的更多信息,请按照link

进行操作

答案 2 :(得分:0)

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

第二个区别是--- ActionResult可以返回任何类型的结果,而ViewResult可以返回结果类型 仅查看。