在 RedirectToAction 中传递对象

Posted

技术标签:

【中文标题】在 RedirectToAction 中传递对象【英文标题】:Passing object in RedirectToAction 【发布时间】:2011-09-29 13:14:06 【问题描述】:

我想。这是我的代码:

RouteValueDictionary dict = new RouteValueDictionary();
            dict.Add("searchJob", searchJob);
            return RedirectToAction("SearchJob", "SearchJob", dict);

其中 searchJob 是 SearchJob 的实例。但我没有得到有关 SearchJob 操作方法的数据。相反,我得到了 searchJob = Entity.SearchJob 的查询字符串。请帮我。我做错了什么?

【问题讨论】:

您查看过RedirectToAction 的文档吗? 具有 SearchJob 动作的控制器是什么?是同一个控制器吗? 没有 SearchJob 是控制器,它有名为 SearchJob 的操作。 @bzlm:我还没有看过文档。但我找到了我的问题的答案。我存储在 TempData 中。我觉得有点小技巧,但它有效。无论如何感谢您的反对票:) +1 因为我讨厌有人投票反对并且不承认它。 【参考方案1】:

您不能将类传递给这样的重定向操作。重定向是通过 URL 完成的。 Url 是一个字符串,所以它不能包含类(将对象序列化为 url 在这里真的不合逻辑

相反,您可以使用TempData

TempData["searchJob"] = searchJob;
return RedirectToAction ...;

并在行动中重定向

Entity.SearchJob = (Entity.SearchJob)TempData["searchJob"] ;

执行上述代码后,TempData 将不再包含 searchJob。 TempData一般用于单次读取。

但我不喜欢上面的方式。如果我在您的位置并想按名称搜索职位,我会添加路径参数,例如

RouteValueDictionary dict = new RouteValueDictionary();
dict.Add("searchJobName", searchJob.JobName);

并通过参数接收它以执行操作

public ActionResult SearchJob(string searchJobName)

... do something with the name

这样,您可以获得更好的用户和 HTTP 友好 URL,并且从操作的角度来看,它将从外部获取所需的所有参数。这更适合测试、维护等。

【讨论】:

【参考方案2】:

你可以试试:

return RedirectToAction("SearchJob", "SearchJob", new RouteValueDictionary(searchJob))

searchJob 对象传递给RouteValueDictionary 构造函数将分解searchJob 对象并将SearchJob 类的每个属性作为***路由值传递。

使用默认模型绑定器,动作定义为:

public ActionResult SearchJob(SearchJob searchJob)

将收到一个完全补水的SearchJob 对象。

【讨论】:

它确实适用于简单的对象。但嵌套对象为空。对于复杂的对象,我将不得不使用 TempData。 @Sven 是在将对象传递给 RouteValueDictionary 构造函数之前填充的值吗? 是的,该对象之前已填充。 有示例 pastebin 吗?【参考方案3】:

您不能将类传递给 RedirectToAction 方法,如果您想在查询字符串中或通过 POST 传递整个对象,您可以使用 XML 或 JSON 序列化对象并在接收器控制器中反序列化对象。 如果你使用这种方法要小心序列化对象的大小。

【讨论】:

【参考方案4】:

尝试使用Cross-Page Posting,您可以确定 Prevoiuse 页面类型,并使用它对象。

【讨论】:

以上是关于在 RedirectToAction 中传递对象的主要内容,如果未能解决你的问题,请参考以下文章

MVC - 使用 RedirectToAction() 传递数据

传递参数的mvc RedirectToAction [重复]

使用 RedirectToAction 传递 TempData

redirectToAction 正在重置数组

如何在 asp.net MVC 中使用 RedirectToAction 将模型从一个 Action 方法传递到另一个?尽管我发送了一个填充模型,但我得到的是空模型

RedirectToAction 和 RedirectToRoute