MVC4将消息从一个控制器传递到另一个控制器

时间:2013-06-12 06:03:05

标签: c# asp.net-mvc asp.net-mvc-4

想象一下,我有一个控制器注册某人,如果成功,应该在另一个控制器视图上显示一条消息。

   [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 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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

中也有讨论