一尘不染

在RedirectToAction中传递对象

c#

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

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

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


阅读 553

收藏
2020-05-19

共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,并且从Action的角度来看,它将从外部获取其所需的所有参数。这对于测试,维护等而言更好。

2020-05-19