在ASP.Net Core 2.1 MVC中,TempData始终为空

时间:2018-07-23 16:05:01

标签: c# asp.net-core-2.0 tempdata

我想在我的.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();
}

4 个答案:

答案 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中)