我想在RedirectToAction中传递对象。这是我的代码:
RouteValueDictionary dict = new RouteValueDictionary();
dict.Add("searchJob", searchJob);
return RedirectToAction("SearchJob", "SearchJob", dict);
其中searchJob是SearchJob的实例。但我没有得到SearchJob动作方法的数据。相反,我得到searchJob = Entity.SearchJob的查询字符串。请帮我。我做错了什么?
答案 0 :(得分:35)
您无法将类传递给重定向的操作。重定向通过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,从Action的角度来看,它将从外部获得所需的所有参数。这对测试,维护等更好。
答案 1 :(得分:19)
您可以尝试:
return RedirectToAction("SearchJob", "SearchJob", new RouteValueDictionary(searchJob)
将searchJob
对象传递到RouteValueDictionary
构造函数将分解searchJob
对象,并将SearchJob
类的每个属性作为顶级路由值传递。
使用默认模型绑定器,定义为:
的操作public ActionResult SearchJob(SearchJob searchJob)
将获得完全重新补水的SearchJob
物品。
答案 2 :(得分:0)
您不能将类传递给RedirectToAction方法,如果要在查询字符串中传递整个对象,或者通过POST,您可以使用XML或JSON序列化对象并反序列化接收器控制器中的对象。 如果使用这种方法,请注意序列化对象的大小。
答案 3 :(得分:-3)
尝试使用Cross-Page Posting您可以确定上一页类型,并使用它对象。