Я использую атрибут [TempData]
для свойства моего класса контроллера, например:
public class FooController : Controller
{
[TempData]
public string ReturnUrl { get; set; }
....
}
И установка этого значения в действии Index, обрабатывающем запрос GET:
public IActionResult Index(string returnUrl = null)
{
this.ReturnUrl = returnUrl;
// Do stuff...
return View();
}
У меня есть второе действие, обрабатывающее запрос POST, который возникает из первого действия (Index), именно здесь мне нужно прочитать значение TempData
обратно:
[HttpPost]
public IActionResult HandlePost(int id)
{
// Do post things...
// Read value from [TempData] backed property
string returnUrl = this.ReturnUrl;
return this.Redirect(returnUrl);
}
Однако я обнаружил, что значение свойства ReturnUrl
всегда равно null
.
Но если я использую TempData
напрямую, вот так:
// Set return url
TempData["returnUrl"] = returnUrl;
А также
// Get return url
string returnUrl = TempData["returnUrl"] as string;
Он отлично работает - я неправильно использую атрибут? Можно ли использовать [TempData]
таким образом?
[TempData]
будет иметь значение, назначенное поставщиком временных данных только один раз, поскольку для присвоения значения свойства поставщик удаляет запись из словаря временных данных при доступе к нему. Вот как работают временные данные. Убедитесь, что между запросами GET и POST к вашему контроллеру не поступают запросы. Любой запрос к вашему контроллеру приведет к заполнению свойства temp, что приведет к удалению записи. Если вам нужен больший контроль, рассмотрите возможность использования кэш памяти. - person Prolog   schedule 08.04.2021