【问题标题】:In my asp.net mvc 2 application, why are parameters passed via RedirectToAction sometimes lost?在我的 asp.net mvc 2 应用程序中,为什么有时会丢失通过 RedirectToAction 传递的参数?
【发布时间】:2012-05-26 09:23:42
【问题描述】:

在我的 asp.net mvc 2 应用程序中,为什么有时会丢失通过 RedirectToAction 传递的参数?

这让我很困惑。有时使用 RedirectToAction 有效,有时则无效。我没有找到任何押韵或理由。这是一个例子:

        return RedirectToAction("ExportReport",
            new { FieldOrder = fieldOrder });

我也试过这个变种:

        return RedirectToAction("ExportReport", "SearchAndExport",
            new { FieldOrder = fieldOrder });

我在 global.asax.cs 中添加了以下内容:

        routes.MapRoute(
            "ExportReport",
            "{controller}.aspx/{action}/{FieldOrder}",
            new { controller = "SearchAndExport", action = "ExportReport", FieldOrder = UrlParameter.Optional }
          );

最后,我要重定向到的操作的原型:

public FileContentResult ExportReport(List<String> FieldOrder)

FieldOrder 的数据永远不会进入重定向操作。为什么?我知道我已经这样做了,并且它也工作了很多次。什么给了?

编辑 1

为了清楚起见,FieldOrder 是List&lt;String&gt;。我没有使用站点区域。重定向本身有效,但数据不会传递给方法。我已经验证了应该通过调试传递的数据。

另外,我宁愿不使用 TempData。如果您有多个动作重定向到另一个更通用的动作,那将变得混乱。通过参数传递数据更简洁(恕我直言)。

【问题讨论】:

  • 您在使用区域吗?重定向是否始终正常工作?
  • 我没有使用任何区域。除了不传递我在 return RedirectToAction 行中作为参数输入的值之外,重定向确实可以正常工作。

标签: c# asp.net-mvc asp.net-mvc-2 redirecttoaction


【解决方案1】:

在这里复习我的一些老问题...

这些重定向值丢失的原因是我传递了一个复杂对象作为参数。 ASP.NET MVC 2 没有处理这些。带有原始类型参数的重定向可以正常工作。

【讨论】:

    【解决方案2】:

    将您的 FieldOrder 存储在 TempData 中(仅保存一次重定向的数据)http://msdn.microsoft.com/en-us/library/system.web.mvc.tempdatadictionary.aspx

    【讨论】:

    • 我知道这是一个可行的选择,但我讨厌这样做。它很容易迷失在混合中。以我描述的方式使用 RedirectToAction 应该可以工作。我想知道为什么不是。不过,谢谢你的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 2015-05-21
    • 1970-01-01
    • 2011-09-06
    • 2010-09-05
    相关资源
    最近更新 更多