Что мне не хватает, что заставляет [TempData] украшенное свойство не сохранять ценность от получения к сообщению?

Мое понимание атрибута TempData в ядре asp.net заключается в том, что оно маркирует свойство модели, поскольку оно должно сохраняться в значении между сообщениями и получать одну и ту же страницу (и, возможно, более продолжительное время жизни, но, по крайней мере, это).

Моя проблема заключается в том, что любое свойство, которое я пометило как TempData и успешно установлено в OnGetAsync, было сброшено до нуля, когда пользователь отправил обратно форму. Почему это может быть так?

Или я неправильно понял, что TempData должен делать как атрибут? Если у меня есть, как лучше всего добиться того, что я пытаюсь сделать? Передайте номер телефона на просмотр, а затем верните его обратно в OnPostAsync?!?

public class MyPageModel : PageModel
{
    [TempData] public string PhoneNumber { get; set; }

    public async Task<IActionResult> OnGetAsync(string phoneNumber)
    {
       PhoneNumber = phoneNumber; //THIS IS WORKING
       return Page();
    }

    public async Task<IActionResult> OnPostAsync()
    {
         user.PhoneNumber = PhoneNumber; //BUT BY HERE PHONENUMBER is NULL?
    }
}

// В Startup.ConfigureServices // Я добавил CookieTempDataProvider, который у меня раньше не был, но я считаю, что CookieTempDataProvider включен по умолчанию: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/ приложение-состояние? вид = aspnetcore-2,1 # TempData

services.AddSingleton<ITempDataProvider, CookieTempDataProvider>();
services.AddSession(options =>
        {
            //// Set a short timeout for easy testing.
            //options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.HttpOnly = true;
        });

Мысли ?!

razor,asp.net-core-mvc,razor-pages,

0

Ответов: 2


0

Если вы хотите связать свойство, вы должны установить для него атрибут [BindProperty], и это должно работать для сообщений:

например,

 [BindProperty]
 public string PhoneNumber { get; set; }

0 принят

ОК, наконец, я вижу, в чем была моя проблема. У меня были опции CookiePolicyOptions. CheckConsentNeeded lambda все еще на месте, хотя я вынул CookieConsentPartial. Поэтому я предполагаю, что файлы cookie, которые предоставили поддержку для TempData, не были установлены, потому что эффективно, я не соглашался с ними.

Для справки, после сортировки ниже, мне не нужно было иметь НИЧЕГО TempData или Cookie, связанных с моей настройкой или ConfigureServices. Потому что согласно состоянию сеанса и приложения в статье ASP.NET Core :

В ASP.NET Core 2.0 или более поздней версии поставщик TempData на основе файлов cookie по умолчанию используется для хранения TempData в файлах cookie.

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
           // options.CheckConsentNeeded = context => true; // WORKED FINE WHEN I COMMENTED IT OUT.  DID NOT WORK WHEN COMMENTED IN.
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });
Бритва, asp.net-ядро-MVC, бритва-страница,
Похожие вопросы