[英]Passing an object in RedirectToAction
我有一个已收到POST回传并已处理用户请求的控制器。 然后,我建立一个对象,现在,想要RedirectToAction。
return RedirectToAction() ("Index", "Location", r);
其中r是我正在使用的命名良好的对象。 但是在目标动作上,r为空。
public ActionResult Index(LocationByAddressReply location)
现在,我在这里阅读了一些有关此的文章,但仍在努力理解。
提出的一个选择是
TempData["myObject"] = myObject;
但这似乎很奇怪。 输入不安全。 这是传递对象的最合适方法吗?
您可以通过两种方式执行此操作:
第一种选择 ,如果您有简单的模型
return RedirectToAction("Index", "Location", new { Id = 5, LocationName = "some place nice" });
那需要维护,请考虑一下以后是否需要向模型中添加属性。 因此,您可以像这样:
第二种选择 , UrlHelper
是您的朋友
return Redirect(Url.Action("Index", "Location", model));
第二种选择确实是正确的方法。 model
是您构建并想要传递给LocationController
。
是的,您可以在重定向时使用TempData
获取值。 您的方法应如下所示:
public ActionResult YourRedirectMethod()
{
TempData["myObject"]=r;
return RedirectToAction() ("Index", "Location");
}
和
public ActionResult Index()
{
LocationByAddressReply location=null;
if(TempData["myObject"]!=null)
{
location=(LocationByAddressReply)TempData["myObject"];
}
}
这样,您可以获得先前在重定向方法上设置的模型值。
我认为使用TempData
不是正确的解决方案,请参考此答案 。 您可以改为传递由r
对象组成的匿名对象。 例如,如果您有:
public class UserViewModel
{
public int Id { get; set; }
public string ReturnUrl { get; set; }
}
public ActionResult Index(UserViewModel uvm)
{
...
}
您可以像这样传递该UserViewModel
:
public ActionResult YourOtherAction(...)
{
...
return RedirectToAction("Index", "Location", new
{
id = /*first field*/,
returnUrl = /*second field*/
});
}
ASP.NET MVC将此解析为您期望作为Index
操作中的参数的对象。 如果您尚未切换使用TempData
的代码,请TempData
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.