在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页面类型,并使用它对象。
- 向ASP.NET Web API Controller添加显式操作路由
- Oracle .Net ManagedDataAccess错误:无法从程序集加载类型’OracleInternal.Common.ConfigBaseClass’
- 在Console应用程序中人工填充HttpContext对象
- System.Web.UI.ViewStateException:无效的viewstate
- 在ASP.NET中创建文件夹并将图像上传到该文件夹的最佳方法?
- OutputCache VaryByCustom cookie值
- 如何从ASP.NET中的请求中获取IP地址?
- 使用javascript函数在特定条件下从代码后面调用
- 您使用的是Microsoft Enterprise Library吗?