[英]Null TempData when passing data from controller to view MVC
我在将数据传递到视图的Controller中具有以下类:
public ActionResult ControllerToView(){
...
TempData["example"] = "this is a message!";
...
return Redirect("http://myViewPageLink");
}
在我的视图中,我试图通过以下方式访问TempData字典:
@if(myCondition){
var test = TempData["example"];
<p>@test</p>
}
始终满足“ myCondition”,但TempData词典始终为空。 有什么想法吗? 为了使TempData在视图中可用,我必须编写任何辅助代码吗?
可能有用的信息是,在调用控制器方法之前,我向同一控制器中的另一个方法发出了ajax请求。
您应该知道TempDataDictionary
用于短期实例。 当下一个请求确实重定向到下一个视图时(适用于一次性消息),其值在当前和后续请求期间可用。 在后续请求完成后,您分配给TempDataDictionary
任何值都将被丢弃 ,称为“正常读取”。
这样您的当前请求就包含以下序列:
TempDataDictionary
Keep
或Peek
方法,则Request => ViewResult ==> TempDataDictionary
内容可以在此处丢弃 TempDataDictionary
为空) 因此,使用TempDataDictionary
的正确方法是直接传递值以在当前请求中查看,或使用重定向到另一个控制器操作方法作为后续请求,如以下示例:
调节器
public ActionResult ControllerToView()
{
...
TempData["example"] = "this is a message!";
...
// returning view counts as providing response
return View();
}
视图
@if (myCondition)
{
var test = TempData["example"]; // showing message
<p>@test</p>
}
上面示例的请求顺序如下:
TempDataDictionary
TempDataDictionary
不为空) 如果使用RedirectResult
然后尝试在TempData
读取/显示值而未指定“下一个操作”,则该值被视为“正常读取”,并且在下一个请求中不持久。 您可以使用“下一个动作”: Keep
或Peek
(在视图或控制器动作中):
// Keep
var test = TempData["example"];
TempData.Keep("example");
// Peek
var test = TempData.Peek("example");
注意:如果您希望设置值在多个请求中保持HttpSessionState
,我强烈建议使用HttpSessionState
:
// set session state
Session["example"] = "[any value]";
// read in another request
var testing = Session["example"];
参考文献:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.