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

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

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

最佳答案

您不能将类传递给这样的重定向操作。重定向是通过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);

并通过参数接收 Action
public ActionResult SearchJob(string searchJobName)
{
... do something with the name
}

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

08-06 16:27