想象一下,我有一个控制器注册某人,如果成功,应该在另一个控制器视图上显示一条消息。
[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),那就更好了
答案 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服务器),则需要正确配置会话以使用相同的存储(通常是数据库)
中也有讨论