只是想知道为什么我在示例MVC代码中看到的几乎每个控制器方法都返回ActionResult,即使代码只能返回一种类型的结果.我知道有些情况需要保证,因为你可能会根据逻辑返回RedirectResult或ViewResult,但对于我见过的大多数方法来说情况并非如此.
是不是等于在方法上有一个返回类型的'对象'?为什么不直接指定JsonResult,或FileResult或ViewResult作为返回类型?我没有看到在每个控制器方法上将返回类型设置为ActionResult的好处吗?
经典例子:
public ActionResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
为什么这似乎是常态而不是这个:
public ViewResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
编辑:到目前为止,除了一个以外的所有响应都表明ActionResult更通用.我知道的很多.:)为什么这是在控制器方法上接受的练习,而不是其他地方?您不仅要返回普通方法中可以使用的类型的最高级别基类,而是尝试返回通常可以使用的最具体类型.是什么让控制器方法变得如此不同以至于博主和"示例代码编写者"(是的,我将这个术语提升了)只会诉诸于返回ActionResult?
从SO上接受的答案中引用了varbatim.我感觉合理:
ASP.NET MVC控制器方法必须返回ActionResult吗?
您绝对可以使用特定的返回类型,即使Web上的大多数示例似乎都返回了ActionResult.我唯一一次返回ActionResult类是当action方法的不同路径返回不同的子类型时.
Steven Sanderson还建议在他的书Pro ASP.NET MVC Framework中返回特定类型 .看看下面的引用:
" 这个动作方法明确地声明它返回一个ViewResult的实例.如果方法返回类型是ActionResult(所有动作结果的基类),它将工作相同.实际上,一些ASP.NET MVC程序员声明他们所有的action方法返回一个非特定的ActionResult,即使它们确实知道它总会返回一个特定的子类.但是,面向对象编程中一个公认的原则是方法应该返回它们可以使用的最具体的类型(以及他们可以接受最常用的参数类型.遵循这个原则可以最大化调用方法的代码的便利性和灵活性,例如你的单元测试. "
也可以看看:
| 归档时间: |
|
| 查看次数: |
2319 次 |
| 最近记录: |