2013-02-21 41 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