重定向到其他控制器中的操作

时间:2008-11-24 09:57:14

标签: asp.net-mvc cross-controller-redirect

我想从一个控制器中的操作重定向到第二个控制器中的操作。通常我会使用RedirectToAction(“actionName”,“controllerName”,对象); 我想重定向到的方法有两个重载:

  • 一个用于HttpVerbs.Get,用于直接链接
  • 一个用于HttpVerbs.Post接受通过modelbinding填充的引用类型

当我使用RedirectToAction方法进行重定向时,默认情况下我被重定向到GET方法,当然这与我的参数不匹配。
如何确保重定向到正确的操作过载?

- 编辑 -
根据要求提供一些更具体的细节:
我想要重定向的操作根据参数填充viewData,然后调用正确的视图。

public ActionResult OverView(SearchBag searchBag, IngredientBag ingredientBag) {

它有第二个版本的Get,所以它也可以通过GET工作:

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult OverView(int colorId, string paintCode, string name, int formulaId) {
    return OverView(new SearchBag() 
        { ColorId = colorId, PaintCode = paintCode, ColorName = name, FormulaId = formulaId }
            , formulaViewData.IngredientBag);
}

我现在打电话的是另一个控制器。它进行一些预先计算,获取所需的信息,然后执行与先前操作完全相同的操作。我可以从第一个动作复制代码,但我宁愿调用该动作。

[AcceptVerbs(HttpVerbs.Post)]
public RedirectToRouteResult ReCalculate(SearchBag searchBag, IngredientBag ingredientBag) {

我可以创建下一个控制器的临时本地实例,但是我注意到它没有正确的HTTPContext并且没有点击初始化方法。

2 个答案:

答案 0 :(得分:3)

您不能使用RedirectToAction(或其他任何东西)来使浏览器使用HTTP POST重定向。你可以用一些JavaScript破解它,但它会很难看。

如果您可以提供有关要将用户重定向到的目标操作的更多详细信息,我们可以为您提供更好的答案。请使用目标操作的签名和您希望提供的参数值的详细信息更新您的问题,以便人们可以提供适当的指导。

我猜你要做的是在TempData中存储一些数据,调用RedirectToAction,从目标Controller / Action中的TempData加载并处理。

有关TempData的更多信息,请参阅以下问题; http://www.google.com/search?q=tempdata+site%3Astackoverflow.com

答案 1 :(得分:2)

由于您已填写对象,因此可以考虑从第一个操作返回相同的视图而不是重定向。