返回ActionResult的操作有什么意义?
答案 0 :(得分:20)
返回一个ActionResult而不是“只是做ActionResult正在做的事情”(即直接使用Response.Redirect或尝试直接通过Response OutputStream渲染一个View)给你一个非常好的优势:单元测试真的很容易特别是因为您通常不需要Web服务器来测试MVC项目。
附录:作为重定向的示例:
如果你这样做
return Redirect(newUrl);
在您的控制器中,您的单元测试现在可以
附录2:当我在上面时,这是一个Custom ActionResult的例子:
http://www.stum.de/2008/10/22/permanentredirectresult/
这只是为了表明他们不是“黑魔法”。它们实际上非常简单:您的Controller返回一个Action Result,MVC Runtime最终会调用它上面的ExecuteResult函数,传入一个ActionContext可以与之交互的ControllerContext。重点是将M-V-C的各个部分分开,使代码可重用,并使单元测试更容易,或简而言之:给出一个非常干净的框架。
答案 1 :(得分:2)
由于它是基类,因此它允许您返回任何ActionResult子类,例如ViewResult或JsonResult。我通常将ViewResult作为默认值返回,但如果我正在处理Ajax以返回JsonResult对象,则会覆盖该行为。
这允许我添加Ajax作为渐进增强,并使应用程序在没有JavaScript的情况下工作,而无需单独的控制器操作。
答案 2 :(得分:1)
ActionResult是许多不同类型的控制器结果的基类。通过返回基类,控制器操作可以返回不同类型的结果,具体取决于方法的结果 - ViewResult,RedirectToActionResult等.ActionResult包含View或新Action所需的所有数据,当前的控制器动作。