在“重定向”后,TempData的值变为空
本文关键字:重定向 TempData | 更新日期: 2023-09-27 18:05:07
我正面临TempData在Redirect之后的问题。
public ActionResult LoginCredentials()
{
// Calling "SetError()" in catch(), if password mismatch.
try{}
catch()
{
return SetError();
}
}
public ActionResult SetError()
{
// set the value of TempData as "true"
TempData["error"] = true;
return Redirect("/Login");
}
public ActionResult Index()
{
ViewData["useError"]= TempData["error"]; // at this point TempData["error"] is null.
...
}
在TempData的SetError()值成功设置为true,问题发生在"Redirect"之后,值变成"null",我不能再使用它了
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
//options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
turn off options.CheckConsentNeeded = context => true;
- 可能浏览器是无cookie的
- TempDataDictionary对象中的数据仅从一个请求持续到下一个请求,除非您使用Keep方法标记一个或多个键以保留,根据您的代码,如果您重定向到登录页面,然后重定向到索引,则值将为空。你只能在登录页面阅读。
我发现。net Core非常有问题。我必须在Configuration
中将其关闭options.CheckConsentNeeded = context => true;
,当我使用重定向导航到另一个页面时,它工作了。
但是在刷新页面时,TempDate或ViewData会失去它们的值。但当我在"视图"中将它重新分配给自身时工作:
@{
TempData["somevalue"] = TempData["somevalue"];
}
使用RedirectToAction
public ActionResult SetError()
{
// set the value of TempData as "true"
TempData["error"] = true;
return RedirectToAction("YourViewName");
}
据我所知,ViewData
仅在重定向后保存数据,而不是当另一个Http请求发生时。所以在Login
方法(你重定向到)这个ViewData["useError"]
必须是可用的,但Index
方法只是在另一个http请求期间执行的另一个方法。这就是为什么ViewData["useError"]
是空的
如果你想在不同的Http请求之间存储数据,可以使用Session
在CookieTempDataProviderOptions
中设置cookie为必需,为我解决了这个问题。
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = _ => true;
options.MinimumSameSitePolicy = SameSiteMode.Strict;
});
services.Configure<CookieTempDataProviderOptions>(options =>
{
options.Cookie.IsEssential = true;
});
更多信息:https://learn.microsoft.com/en us/dotnet/api/microsoft.aspnetcore.mvc.cookietempdataprovideroptions.cookie?view=aspnetcore - 7.0