Dom*_*nic 292 asp.net asp.net-mvc
ViewResult()和ActionResult()ASP.NET MVC有什么区别?
public ViewResult Index()
{
return View();
}
public ActionResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
Div*_*ivi 369
ActionResult是一个抽象类,可以有几个子类型.
ViewResult - 将指定的视图呈现给响应流
PartialViewResult - 将指定的部分视图呈现给响应流
EmptyResult - 返回空响应
RedirectResult - 执行HTTP重定向到指定的URL
RedirectToRouteResult - 根据给定的路由数据执行HTTP重定向到由路由引擎确定的URL
JsonResult - 将给定的ViewData对象序列化为 JSON格式
JavaScriptResult - 返回可在客户端上执行的一段JavaScript代码
ContentResult - 无需视图即可将内容写入响应流
FileContentResult - 将文件返回给客户端
FileStreamResult - 将文件返回给客户端,该文件由Stream提供
FilePathResult - 将文件返回给客户端
RPM*_*984 118
ActionResult是一个抽象类.
ViewResult派生自ActionResult.其他派生类包括JsonResult和PartialViewResult.
您以这种方式声明它,以便您可以利用多态并在同一方法中返回不同的类型.
例如:
public ActionResult Foo()
{
if (someCondition)
return View(); // returns ViewResult
else
return Json(); // returns JsonResult
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*evy 20
ViewResult是ActionResult的子类.View方法返回ViewResult.所以这两个代码片段确实完全相同.唯一的区别是,使用ActionResult,您的控制器不承诺返回视图 - 您可以更改方法体以有条件地返回RedirectResult或其他内容,而无需更改方法定义.
Zai*_*sud 11
虽然其他答案已正确注意到差异,但请注意,如果您实际上只返回ViewResult,则最好返回更具体的类型而不是基本的ActionResult类型.这个原则的一个明显例外是当你的方法返回从ActionResult派生的多个类型时.
有关此原则背后原因的完整讨论,请参阅此处的相关讨论:ASP.NET MVC控制器方法必须返回ActionResult吗?
| 归档时间: |
|
| 查看次数: |
149095 次 |
| 最近记录: |