繁体   English   中英

在RedirectToAction中传递对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM