【发布时间】:2019-04-01 13:04:04
【问题描述】:
所以我有这个问题,我无法以我认为应该解决的方式解决。
我有一个 ASP.NET Core 2.1 Razor 页面项目。代码粘贴在下面,我的问题如下:
在索引页面上,我有一个搜索表单。我在搜索表单中输入的城市名称将在 SearchResults OnPost 方法中使用。
OnPost 重定向到 OnGet,它根据从搜索表单中传入的城市从数据库中检索一些结果。据我了解,TempData 应该能够保留从表单传入的城市的值,但是,每当我尝试在 OnGet 方法中读取 TempData["CityFromForm"] 时,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 razor 页面。
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
}
【问题讨论】:
标签: asp.net asp.net-core razor-pages tempdata