是否有相当于ViewResult的ActionResult RedirectToAction?

时间:2012-12-14 09:37:53

标签: asp.net-mvc-3

我已经查看过以前的问题,但我找不到这个特定场景的答案:我使用的是带有TDD方法的ASP.NET MVC 3。在我的动作方法中,我使用与ActionResult相对的返回类型的ViewResult。这可以测试我的控制器。但是,我需要测试我的视图模型以及我的控制器。通过在我的模型测试中使用ViewResultBase上的Model属性(实现了ViewResult而不是ActionResult),我可以非常愉快地完成这项工作。

如果视图模型为null,那么我想重定向到另一个动作。 ActionResult支持RedirectToAction方法。但是,ViewResult没有。我尝试过View方法,但网址在浏览器地址栏中没有变化。另外,我甚至尝试过经典的ASP.Net Response.Redirect(...),不出所料,我的单元测试抱怨没有填充Response对象。

那么,我使用什么方法来实现ViewResult的ActionResult RedirectToAction等效?

2 个答案:

答案 0 :(得分:0)

如果需要从控制器返回多个结果类型,则将其返回类型设置为action result,然后断言不同的条件创建正确的结果类型。

例如,在AJAX操作中,您可能希望返回HttpStatusCodeResults,以便在验证失败或存在异常时将响应属性设置为错误。

然后,当操作成功时,您可能希望返回部分视图以显示结果。

使用这种方法,您可以在控制器中定制逻辑并仍然断言不同的结果是正确的。

答案 1 :(得分:0)

我找到了办法。我使用了以下步骤:

  1. 我将我的动作方法返回类型设置为ActionResult

  2. 我更改了单元测试以使用ActionResult

  3. 我使用返回类型ResultView创建了两个额外的操作方法。

  4. 对于来自[1]的if语句操作方法的每个分支,我重定向到[3]中的相应操作方法,我使用RedirectToAction进行重定向。

  5. 我创建了两个单元测试,它们使用ResultView来测试[3]中创建的操作方法,并让我可以访问每个测试的基础模型。