2013-03-18 29 views
0

在我的控制器我有字符串變量RedirectToAction(),刪除字符串數據

private string notificationMessage = ""; 

,我想用複製它的內容到ViewBag.Message,並顯示以下觀點的內容。

所以我的編輯操作中我填充它(notificationMessage)內容這樣

notificationMessage = "data is succ. updated!"; 
return RedirectToAction(); 

但重定向Index操作後這個字符串變量是空的;

怎樣才能解決這個問題?

+0

使用的TempData,TempData的保持其價值,第二個請求爲@硼烷的答案... – 2013-03-18 12:30:53

回答

3

這是因爲RedirectToAction向瀏覽器返回一個HTTP 302響應,這會導致瀏覽器向指定操作發出請求GET。由於HTTP是無狀態的,你不能簡單地設置在東西一個動作,而在另一個得到它(當它是另一個GET請求)。

你可以做的是

1)通過查詢字符串到新的操作,檢查在接下來的操作方法,並根據所顯示的消息。

return RedirectToAction("ThankYou","Account",new {msg="success"}); 

,並在三江源行動

public ActionResult ThankYou(string msg) 
{ 
    var vm=YourSuccessViewModel(); 
    if(msg="success") // you may do a null checking before accessing this value 
    { 
    vm.Message="Saved Successfully"; 
    } 
    return View(vm); 
} 

2)存放在如會話/ TempData的臨時場所。 TempData的意思是一個非常短暫的情況下,你應該只在當前,只有後續請求使用它!

TempData["UserMsg"] = "Saved Successfully"; 
return RedirectToAction("ThankYou","Account"); 

,並在您ThankYou行動,你可以讀取它,並根據需要展現給用戶。

public ActionResult ThankYou(string msg) 
{ 
    var msg = TempData["UserMsg"] as string; 
    //to do : do what you want with the message and return the view. 
} 

會話對象是TempData的對象的後備存儲器,它被破壞比常會更迅速地,即,隨後的請求之後。

+0

偉大的答案!我怎樣才能在視圖中顯示TempData? TempData [「UserMsg」]? – user1765862 2013-03-18 12:42:01

+0

@ user1765862:更新了答案。 – Shyju 2013-03-18 12:50:17

4

使用TempData代替ViewBag。它在請求之間持續存在。

+0

+1更快的答案:) – 2013-03-18 12:32:15