2013-02-21 39 views
2

我打电话从多个页面控制器和正在使用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)时回到视图?在上面的例子中,当returnUrl有一个值时,我希望能够通过message

+0

您可以使用ViewData [“message”] =“您被重定向了。” – 2013-02-21 15:05:10

+1

这不起作用 - 它不会传递到重定向的页面。 – 2013-02-21 15:23:02

回答

3

如果您正在重定向到另一个操作方法,并且想要传递可以在新操作方法中访问的数据,则应该使用ASP.MVC控制器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(); 
} 

如果你想获得一个值,而不将其标记为删除,你可以使用“窥视”的方法:

var data = TempData.Peek("message") 

此外,您也可以手动保存,否则将被删除的值使用“保持”方法:

TempData.Keep("message") 

TempData是TempDataDictionary类型。

请注意,TempData在幕后使用ASP.Net会话状态,所以如果您使用的是TempData,则必须启用会话状态。

有关TempData的更多信息,请参阅here

+0

谢谢,这真是太棒了 - 可以享受美食。 (也从你的链接中发现了一个有趣的jQuery电子书 - 奖励积分!!) – 2013-02-21 15:36:18

+0

哦,我现在在链接中看到了jquery电子书。我没有注意到这一点。我看起来很有兴趣...很高兴为你解决问题。 – 2013-02-21 15:39:56