我的问题可能很明显或很简单,但我似乎无法解决。
我有一个按钮,当按下该按钮时,它将从API端点(从另一家公司)检索JSON数据。该端点返回30000条记录。
检索到数据后,我将使用适当的模型将其显示到前端。这一切都很好。
我添加了一个在服务器端处理的搜索框,当给出搜索值时,它返回到检索数据的同一端点,但是,如果数据已经加载,则我不想再次检索数据。所以我想我可以使用Data属性模型来检查它是否为空。但是,这不起作用。
代码如下:
后端剃须刀页面:
public class IndexModel : PageModel
{
private readonly IGetDataService _getDataService;
[BindProperty]
public List<DataModel> DataModel { get; set; }
public string CurrentFilter { get; set; }
public IndexModel(IGetDataService dataService)
{
_getDataService = dataService;
}
public async Task<IActionResult> OnGetLoadData(string searchString)
{
CurrentFilter = searchString;
List<DataModel> data = null;
// Check if data has already been retrieved
if (DataModel == null)
data = await _getDataService.ReadAll(new Uri("https://restapi.xxxxx"));
else
data = DataModel;
if (!String.IsNullOrEmpty(searchString))
{
data.Where(s =>
s.field1.Contains(searchString) ||
s.field2.Contains(searchString) ||
s.field3.Contains(searchString) ||
s.field4.Contains(searchString)
);
}
DataModel = data;
return Page();
}
}
前端代码:
@page "{handler?}"
@model IndexModel
@{
ViewData["Title"] = "Data page";
}
<form asp-page-handler="LoadData" asp-route-id="" method="get">
<button id="lurvink-button" class="btn btn-primary">
Get Data
</button>
</form>
@if (Model.DataModel != null)
{
<form class="form-group has-search" asp-page-handler="LoadData" method="get">
<span class="fa fa-search form-control-feedback"></span>
<input type="text" class="form-control" placeholder="Search" name="SearchString" value="@Model.CurrentFilter">
</form>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.DataModel[0].field1)
</th>
<th>
@Html.DisplayNameFor(model => model.DataModel[0].field2)
</th>
<th>
@Html.DisplayNameFor(model => model.DataModel[0].field3)
</th>
<th>
@Html.DisplayNameFor(model => model.DataModel[0].field4)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.DataModel)
{
<tr>
<td>@item.field1</td>
<td>@item.field2</td>
<td>@item.field3</td>
<td>@item.field4</td>
</tr>
}
</tbody>
</table>
}
答案 0 :(得分:1)
我对Razor Pages并不熟悉,但是希望(与普通的MVC一样)该状态不会通过多次调用保持。
您可以使用MemoryCache在特定时间内存储DataModel。