Итак, у меня есть проблема, которую я не могу решить так, как я думаю, она должна быть решена.
У меня есть проект страниц ASP.NET Core 2.1 Razor.Код вставлен ниже, и моя проблема заключается в следующем:
На странице индекса, у меня есть форма поиска.Название города, которое я ввожу в форму поиска, используется в методе SearchResults OnPost.
OnPost перенаправляет на OnGet, который извлекает некоторые результаты из базы данных на основе города, переданного из формы поиска.Насколько я понимаю, TempData должна иметь возможность сохранять значение для города, переданного из формы, однако всякий раз, когда я пытаюсь прочитать TempData ["CityFromForm"] в методе OnGet, словарь TempData остается пустым, даже если он находится вМетод OnPost Я использовал метод TempData.Keep.
Мое текущее решение для этого - использование в кеше памяти для хранения значения города и передачи его методу, который извлекает данные из базы данных, но я хотел бызнать, почему не работает подход TempData.
На странице индекса этого проекта есть поиск, в котором я ввожу город, по которому я хочу найти данные, например:
@model SearchDataViewModel
<form asp-page="/Search/SearchResults" method="post" class="col s6">
<div class="row">
<div class="input-field col s12">
<input placeholder="Please enter a city" type="text" name="City" class="validate autocomplete" id="autocomplete-input" autocomplete="off" />
<label for="City">City</label>
</div>
</div>
<div class="row">
<div class="input-field col s6">
<input id="StartDate" name="StartDate" type="text" class="datepicker datepicker-calendar-container">
<label for="StartDate">Start date</label>
</div>
<div class="input-field col s6">
<input id="EndDate" name="EndDate" class="datepicker datepicker-calendar-container" />
<label for="EndDate">End date</label>
</div>
</div>
<input type="submit" hidden />
</form>
В этой форме важен город.Эта форма отправляется на страницу бритвы SearchResults.
SearchResults.cshtml.cs
public IActionResult OnPost()
{
// Cache search form values to persist between post-redirect-get.
var cacheEntry = Request.Form["City"];
_cache.Set<string>("City", cacheEntry);
TempData["CityFromFrom"] = Request.Form["City"].ToString();
TempData.Keep("CityFromForm");
return RedirectToPage();
}
// TODO: Find a better way to persist data between onPost and OnGet
public async Task OnGet(string city)
{
City = _cache.Get<string>("City");
var temp = TempData["CityFromForm"];
// Here I'd like to pass the TempData["CityFromForm"] but it's null.
await GetSearchResults(City); // this method just gets data from the database
}