我想在我的.net核心mvc应用程序中使用TempData。 我关注了https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.1#tempdata
中的文章我总是得到NULL 这是我的代码:
public async Task<ActionResult> Index(RentalsFilter filter)
{
TempData["test"] = "ABC";
return View();
}
public ActionResult Create()
{
var abc = TempData["test"].ToString();
return View();
}
答案 0 :(得分:2)
由于GDRP(https://docs.microsoft.com/en-us/aspnet/core/security/gdpr?view=aspnetcore-2.1),出现了类似的问题。如果您希望在不担心GDPR的情况下启动并运行它,只需禁用它即可。下面的配置还使用Cookie(默认)而不是TempData的会话状态。
Startup.cs
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.Configure<CookieTempDataProviderOptions>(options =>
{
options.Cookie.IsEssential = true;
});
...
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy(); // <- this
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
答案 1 :(得分:0)
您是否按照文档中所述配置了TempData:
在ConfigureServices方法中添加:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddSessionStateTempDataProvider();
services.AddSession();
然后在Configure方法中应添加:
app.UseSession();
答案 2 :(得分:0)
请放置
@{TempData.Keep("test");}
在您的HTML文件中。 对于下一个请求,它将保持不变。
答案 3 :(得分:0)
(对于asp.net Core 2.2)最适合我的答案是
in Startup.Configure() app.UseCookiePolicy(); should be after app.UseMVC();
上面的某人已链接到this stackoverflow answer的评论中
除了拥有
app.UseSession()(在“配置”中)
和
services.AddSession()(在ConfigureServices中)