2011-05-10 49 views
1

嗨 在動作中,我設置了HttpContext.Current.Items.Add(...)。現在我正在重定向到同一控制器中的另一個操作。我無法獲得當前的HttpContext。ASP.NET MVC中的HttpContext.Current.Items的範圍2

這是不可能的。有沒有解決這個問題的方法,而不是使用臨時數據。

回答

3

HttpContext僅在當前HTTP請求期間可用。如果您重新引用另一個操作,即另一個由另一個HttpContext通過瀏覽器發送的HTTP請求。如果要在請求之間保留數據,則可以使用TempData(僅可用於1重定向)或Session。在封面下TempData使用會話作爲存儲,但重定向後它會被框架自動清除。

例與TempData的:

public ActionResult A() 
{ 
    TempData["foo"] = "bar"; 
    return RedirectToAction("B"); 
} 

public ActionResult B() 
{ 
    // TempData["foo"] will be available here 
    // if this action is called after redirecting 
    // from A 
    var bar = TempData["foo"] as string; 

    // TempData["foo"] will no longer be available in C 
    return RedirectToAction("C"); 
} 

實例與會話:

public ActionResult A() 
{ 
    Session["foo"] = "bar"; 
    return RedirectToAction("B"); 
} 

public ActionResult B() 
{ 
    var bar = Session["foo"] as string; 
    // Session["foo"] will still be available in C 
    return RedirectToAction("C"); 
} 
+0

感謝您的答覆。同時我也試着用tempdata。我對新的請求創建有疑問。弄清楚了。再一次感謝你。 – Saravanan 2011-05-10 06:32:28

+0

達林我認爲自ASP.NET MVC 2以來,TempData在Session中持續存在,直到它被讀取。 – ahsteele 2012-02-18 16:03:32