我从多个页面调用控制器,并使用returnUrl
参数返回正确的调用位置:
public ActionResult EmailOrder(int id, string returnUrl)
{
var message = "The order has been emailed";
if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);
return RedirectToAction("Details", new { id, message });
}
使用Redirect(url)
时,如何将其他信息传回视图?在上面的示例中,我希望能够在message
有值时返回returnUrl
。
答案 0 :(得分:3)
如果要重定向到另一个操作方法,并且想要传递可在新操作方法中访问的数据,则应使用ASP.MVC Controller TempData属性。您可以按如下方式使用:
[HttpPost]
public ActionResult MyActionMethod(Order order)
{
// write your logic here to save the Order
TempData["message"] = "here is some message";
return RedirectToAction("Index");
}
TempData成员中的数据将通过重定向保留。它可以在重定向的页面中访问,然后将被删除。读取TempData中的条目后,它将被标记为删除。
public ActionResult RedirectedMethod()
{
//Retrieve data from TempData. It will then be marked for deletion
var data = TempData["message"].ToString();
}
如果要获取值而不将其标记为删除,可以使用“Peek”方法:
var data = TempData.Peek("message")
此外,您可以手动保留一个值,否则将使用“保留”方法删除该值:
TempData.Keep("message")
TempData的类型为TempDataDictionary。
请注意,TempData在幕后使用ASP.Net会话状态,因此如果使用TempData,则必须打开会话状态。
有关TempData的更多信息,请参阅here。