【问题标题】:Redirect to action in other controller重定向到其他控制器中的操作
【发布时间】:2008-11-24 09:57:13
【问题描述】:

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

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

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

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

public ActionResult OverView(SearchBag searchBag, IngredientBag ingredientBag) {

它有第二个版本的 Gets,所以它也可以通过 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 并且没有命中初始化方法。

【问题讨论】:

  • 你可以像这样 [AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)] 将多个动词放在一个动作上
  • 那么您是否尝试将 RedirectToAction 从 ReCalculate 操作重定向到 OverView 操作?
  • 是的。由于我获取了所有对象并在 ReCalculate 中重新计算了它们,因此我不想在概览操作中再次这样做
  • 重点是redirect总是使用get。我不想使用get。我已经获取并重新计算了我的对象。我只是想把它们传下去..
  • 你必须使用get,但你可以使用TempData来避免重新计算。正如我在回答中所建议的那样。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 我要重定向到的操作用必要的内容(列表框项目等)填充我的 viewData,然后调用视图。第二个动作(我现在调用的那个)首先进行一些特定的计算,然后执行与第一个完全相同的事情。我会更新我的 OP
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-02-06
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    相关资源
    最近更新 更多