TempData всегда имеет значение NULL в ASP.Net Core 2.1 MVC

Я хотел бы использовать TempData в моем приложении mvc .net core. Я следил за статьей из 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();
}

person Si Thu    schedule 23.07.2018    source источник
comment
Какой у вас этап операции? Если вы сначала получите доступ к Index, а затем к Create, будет ли он нулевым? Я не могу воспроизвести эту проблему, не могли бы вы поделиться с нами проектом. Может быть, вы могли бы попробовать Session сохранить значения.   -  person Edward    schedule 24.07.2018
comment
Следуйте инструкциям по этой ссылке.   -  person franklores    schedule 22.01.2019


Ответы (4)


Была аналогичная проблема из-за 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?}");
        });
person Artur Kędzior    schedule 28.11.2018

Вы настроили TempData, как сказано в документе:

в методе ConfigureServices добавьте:

services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version
app.UseSession();
1) .AddSessionStateTempDataProvider(); services.AddSession();

И в методе Configure вы должны добавить:

app.UseSession();
person othman.Da    schedule 23.07.2018

Ответ, который сработал для меня (для asp.net Core 2.2), был

in Startup.Configure() app.UseCookiePolicy(); should be after app.UseMVC();

На что кто-то выше ссылался в комментариях из этого ответа на переполнение стека

Это в дополнение к наличию

app.UseSession () (в настройке)

и

services.AddSession () (в ConfigureServices)

person jazza1000    schedule 18.06.2019

пожалуйста, поместите

@{TempData.Keep("test");}

в вашем HTML-файле. Он будет сохранен для следующего запроса.

person WinnerIT    schedule 10.09.2018