Jag*_*ggu 23 c# asp.net asp.net-mvc asp.net-mvc-3
我想在RedirectToAction中传递对象.这是我的代码:
RouteValueDictionary dict = new RouteValueDictionary();
dict.Add("searchJob", searchJob);
return RedirectToAction("SearchJob", "SearchJob", dict);
Run Code Online (Sandbox Code Playgroud)
其中searchJob是SearchJob的实例.但我没有得到SearchJob动作方法的数据.相反,我得到searchJob = Entity.SearchJob的查询字符串.请帮我.我究竟做错了什么?
arc*_*hil 38
您无法将类传递给重定向的操作.重定向通过URL完成.Url是一个字符串,因此它不能包含类(将对象序列化为url在这里真的不合逻辑)
相反,你可以使用 TempData
TempData["searchJob"] = searchJob;
return RedirectToAction ...;
Run Code Online (Sandbox Code Playgroud)
并在行动中重定向
Entity.SearchJob = (Entity.SearchJob)TempData["searchJob"] ;
Run Code Online (Sandbox Code Playgroud)
执行上面的代码后,TempData将不再包含searchJob.TempData通常用于单次读取.
但我不喜欢上面的方式.如果我在你的位置,并希望按名称搜索作业,我会添加路由参数,如
RouteValueDictionary dict = new RouteValueDictionary();
dict.Add("searchJobName", searchJob.JobName);
Run Code Online (Sandbox Code Playgroud)
并通过参数接收它
public ActionResult SearchJob(string searchJobName)
{
... do something with the name
}
Run Code Online (Sandbox Code Playgroud)
这样,您可以获得更好的用户和HTTP友好URL,从Action的角度来看,它将从外部获得所需的所有参数.这对测试,维护等更好.
Cha*_*lie 20
你可以试试:
return RedirectToAction("SearchJob", "SearchJob", new RouteValueDictionary(searchJob)
Run Code Online (Sandbox Code Playgroud)
将searchJob对象传递给RouteValueDictionary构造函数将分解searchJob对象并将SearchJob类的每个属性作为顶级路由值传递.
使用默认模型绑定器,操作定义为:
public ActionResult SearchJob(SearchJob searchJob)
Run Code Online (Sandbox Code Playgroud)
将获得完全补水的SearchJob物体.
| 归档时间: |
|
| 查看次数: |
35395 次 |
| 最近记录: |