【发布时间】:2014-08-27 13:15:48
【问题描述】:
如何决定使用 ActionResult 还是 ViewResult?我知道 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) 查看结果
将指定的视图呈现给响应流
b) 部分视图结果
将指定的部分视图呈现给响应流
c) 空结果
基本上什么都不做;给出一个空响应
d) 重定向结果
执行到指定 URL 的 HTTP 重定向
e) RedirectToRouteResult
根据给定的路由数据执行到由路由引擎确定的 URL 的 HTTP 重定向
f) JsonResult
将给定的 ViewData 对象序列化为 JSON 格式
g) JavaScriptResult
返回一段可以执行的 JavaScript 代码 客户
h) 内容结果
无需视图即可将内容写入响应流
i) 文件内容结果
向客户端返回一个文件
j) 文件流结果
向客户端返回一个文件,由 Stream 提供
k) 文件路径结果
向客户端返回一个文件
如果你确定你的action方法会返回一些view page,你可以使用ViewResult。但是,如果您的操作方法可能具有不同的行为,例如呈现视图或执行重定向。您可以使用更通用的基类 ActionResult 作为返回类型。
更多详情:
http://forums.asp.net/t/1448398.aspx
你也可以参考这里:
http://www.slideshare.net/umarali1981/difference-between-action-result-and-viewresult
【讨论】:
ActionResult也没什么坏处,可以
首先要理解---ActionResult 和 ViewResult 基本上是一个方法的返回类型(即 MVC 中的 Action)。
第二个区别是 --- ActionResult 可以返回任何类型的 Result 而 ViewResult 可以返回结果类型 仅查看。
【讨论】:
如果你使用查看结果,你必须返回一个类似的视图
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 :)
}
作为 OOPS 的基础,总是为抽象而不是具体的 ActionResult 编码总是一个优点。
有关ActionResult的更多信息,请关注link
【讨论】: