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