2013-06-12 218 views
2

想象一下,我有一個控制器註冊某人,如果成功應該在另一個控制器視圖上顯示消息。MVC4將消息從一個控制器傳遞到另一個控制器

[HttpPost] 
    public ActionResult Register(RegisterModel model) 
    { 
     string msg = db.Register(model) 

     // Assuming msg contains "You have been succesfully registered" 
     // How do I display that on the Dashboard view?? 

     return RedirectToAction("Index", "Dashboard"); 
    } 

什麼是的最佳方式傳遞消息或儀表板控制器的一系列消息的?
更妙的是,如果我可以通過對象的列表與自己的屬性(類似obj.Status & & obj.Message)

回答

2

您可以使用TempData屬性。這將保留1個請求的數據,以便您可以在重定向上訪問此數據。

TempData["MyObject"] = new MyObj 
{ 
    prop1 = "Test", 
    prop2 = "Prop" 
} 

然後,您可以訪問它想:

var myObj = TempData["MyObject"] as MyObj; 

OR

var myObj = (MyObj)TempData["MyObject"]; 

您還可以擴展方法:

public MyObj GetMyObj(this TempDataDictionary tmpData) 
{ 
    return (MyObj)tmpData["MyObject"]; 
} 

然後訪問它是這樣的:

var myObj = TempData.GetMyObj(); 
+0

好的,我認爲TempData只在當前控制器和相關視圖之間。很高興知道 .... –

1

他們推薦將使用TempData的字典用於此目的。

[HttpPost] 
public ActionResult Register(RegisterModel model) 
{ 
    string msg = db.Register(model) 

    TempData["Message"] = "You are registered!"; 

    return RedirectToAction("Index", "Dashboard"); 
} 

TempData可以作爲ViewData使用,但它內置在Session中,而MVC本身需要在單次重定向後清理它。

唯一的事情就是 - 如果你使用Web場(多個Web服務器),則需要正確配置會話使用相同的存儲(通常是數據庫)

也有this question

討論
+0

很好..謝謝。 –

相關問題