在RedirectToAction中传递对象

我想在RedirectToAction中传递对象。 这是我的代码:

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

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

您无法将类传递给重定向的操作。 重定向通过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 name } 

通过这种方式,您可以获得更好的用户和http友好URL,从Action的角度来看,它将从外部获得所需的所有参数。 这对测试,维护等更好。

你可以尝试:

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

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

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

 public ActionResult SearchJob(SearchJob searchJob) 

将获得完全重新SearchJob对象。

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

尝试使用跨页面发布您可以确定Prevoiuse页面类型,并使用它对象。