MVC4如何在控制器之间传递消息

3
想象一下,我有一个控制器用于注册某个人员,如果成功,应该在另一个控制器视图上显示一条消息。
   [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个回答

2
您可以使用TempData属性。这将保留数据1个请求,因此您将能够在重定向时访问它。
TempData["MyObject"] = new MyObj
{
    prop1 = "Test",
    prop2 = "Prop"
}

您可以像这样访问它:
var myObj = TempData["MyObject"] as MyObj;

或者

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

你也可以创建一个扩展方法:
public MyObj GetMyObj(this TempDataDictionary tmpData)
{
    return (MyObj)tmpData["MyObject"];
}

然后以这种方式访问它:
var myObj = TempData.GetMyObj();

好的,我以为TempData只在当前控制器和相关视图之间。知道了... - SF Developer

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 Farm(多个Web服务器),则需要正确配置会话以使用相同的存储(通常是数据库)

还有这个问题的讨论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接