C# 在RedirectToAction中传递对象
我有一个控制器,它已收到回帖,并已处理用户的请求。然后我构建了一个对象,现在,我想重定向到ActionC# 在RedirectToAction中传递对象,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我有一个控制器,它已收到回帖,并已处理用户的请求。然后我构建了一个对象,现在,我想重定向到Action return RedirectToAction() ("Index", "Location", r); 其中r是我正在处理的命名良好的对象。但在目标操作上,r为null public ActionResult Index(LocationByAddressReply location) 现在,我在这里读了一些关于这方面的帖子,但我很难理解 wasL提出了一个选项 TempData["myO
return RedirectToAction() ("Index", "Location", r);
其中r是我正在处理的命名良好的对象。但在目标操作上,r为null
public ActionResult Index(LocationByAddressReply location)
现在,我在这里读了一些关于这方面的帖子,但我很难理解
wasL提出了一个选项
TempData["myObject"] = myObject;
但这似乎。。。奇怪的不是类型安全的。这是传递对象的最合适方式吗?是的,您可以使用重定向上的TempData获取值。 您的方法应该如下所示:
public ActionResult YourRedirectMethod()
{
TempData["myObject"]=r;
return RedirectToAction() ("Index", "Location");
}
及
通过这种方式,您可以获得以前在重定向方法上设置的模型值。是的,您可以使用TempData on redirect获得值。 您的方法应该如下所示:
public ActionResult YourRedirectMethod()
{
TempData["myObject"]=r;
return RedirectToAction() ("Index", "Location");
}
及
通过这种方式,您可以获得以前在重定向方法上设置的模型值。您可以通过两种方式完成此操作: 第一个选项,如果您有一个简单的模型
return RedirectToAction("Index", "Location", new { Id = 5, LocationName = "some place nice" });
如果需要维护,请考虑以后是否需要将属性添加到模型中。所以你可以想象这样做:
public ActionResult YourOtherAction(...)
{
...
return RedirectToAction("Index", "Location", new
{
id = /*first field*/,
returnUrl = /*second field*/
});
}
第二种选择,UrlHelper是您的朋友
return Redirect(Url.Action("Index", "Location", model));
第二种选择确实是正确的做法。模型是您构建并希望传递给LocationController的对象。您可以通过两种方式完成此操作: 第一个选项,如果您有一个简单的模型
return RedirectToAction("Index", "Location", new { Id = 5, LocationName = "some place nice" });
如果需要维护,请考虑以后是否需要将属性添加到模型中。所以你可以想象这样做:
public ActionResult YourOtherAction(...)
{
...
return RedirectToAction("Index", "Location", new
{
id = /*first field*/,
returnUrl = /*second field*/
});
}
第二种选择,UrlHelper是您的朋友
return Redirect(Url.Action("Index", "Location", model));
第二种选择确实是正确的做法。model是您构建并希望传递给LocationController的对象。我认为使用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将其解析为您期望作为索引操作参数的对象。如果您尚未切换使用TempData的代码,请尝试一下。我认为使用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将其解析为您期望作为索引操作参数的对象。如果您尚未切换使用TempData的代码,请尝试使用它。RedirectToAction确实会重定向您。您的替代方案可能是使用会话。您可以在RedirectToActionIndex、Location、new{object myObject}中传递一个对象。关于这一点,已经有几个问题了:Dave a-我试过了,但仍然为空。如何在接收端访问此对象?@DaveA这些是RouteValue,完全不同。克雷格:你唯一的选择就是使用依赖于会话的东西,或者将它持久化到数据库中。。因此,会话或临时数据是您唯一的选择。RedirectToAction的作用就是重定向您。您的替代方案可能是使用会话。您可以在RedirectToActionIndex、Location、new{object myObject}中传递一个对象。关于这一点,已经有几个问题了:Dave a-我试过了,但仍然为空。如何在接收端访问此对象?@DaveA这些是RouteValue,完全不同。克雷格:你唯一的选择就是使用依赖于会话的东西,或者将它持久化到数据库中。。所以会话或临时数据是您唯一的选择。谢谢。我正在实施这一点。如何确保“TempData”存储不会变得太大?抓取项目后将其删除?TempData将自动变为空。指仅在当前和后续请求期间使用的临时数据。这是会话和tempdataCheck之间的区别,了解更多信息。谢谢。我正在实施这一点。如何确保“TempData”存储不会变得太大?抓取项目后将其删除?TempData将自动变为空。指仅在当前和后续请求期间使用的临时数据。这就是session和tempdataCheck之间的区别,以获取更多信息。