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),那就更好了

4

2 回答 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();
于 2013-06-12T06:12:49.463 回答
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 本身负责在单次重定向后清理它。

唯一的问题是 - 如果您使用网络农场(多个网络服务器),您将需要正确配置会话以使用相同的存储(通常是数据库)

这个问题也有讨论

于 2013-06-12T06:09:04.143 回答