我有一个接收过POST的控制器,并处理了用户请求的内容。然后我构建一个对象,现在,想要RedirectToAction ..
return RedirectToAction() ("Index", "Location", r);
其中r是我正在使用的具有良好名称的对象。但是在目标动作上,r为空。
public ActionResult Index(LocationByAddressReply location)
现在,我在这里读了几篇关于此事的帖子,但我正在努力去理解。
提出的选项是L
TempData["myObject"] = myObject;
但这似乎......很奇怪。不安全。这是最适合传递对象的方法吗?
答案 0 :(得分:3)
您可以通过两种方式执行此操作:
第一个选项,如果你有一个简单的模型
return RedirectToAction("Index", "Location", new { Id = 5, LocationName = "some place nice" });
需要维护时,请考虑以后是否需要在模型中添加属性。所以你可以喜欢这样做:
第二个选项,UrlHelper
是您的朋友
return Redirect(Url.Action("Index", "Location", model));
第二种选择确实是正确的做法。 model
是您构建并希望传递给LocationController
的对象。
答案 1 :(得分:2)
是的,您可以在重定向上使用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"];
}
}
通过这种方式,您可以获得先前在重定向方法上设置的模型值。
答案 2 :(得分:0)
我认为使用TempData
是正确的解决方案,请参阅this answer。您可以改为传递由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
切换代码,请尝试使用。