Сохранить / восстановить данные модели (списка) - Razor Pages - PullRequest
0 голосов
/ 07 июня 2019

Моя проблема, вероятно, что-то очевидное или простое, но я не могу понять это.

У меня есть кнопка, которая при нажатии извлекает данные JSON из конечной точки API (из другой компании). Эта конечная точка возвращает более 30000 записей.

Когда данные были получены, я показываю их на передний план с соответствующей моделью. Это все отлично работает.

Я добавил окно поиска, которое обрабатывается на стороне сервера, когда задано значение поиска, оно возвращается к той же конечной точке, которая извлекает данные, однако, если данные уже были загружены, я не хочу получать данные снова. Поэтому я подумал, что могу просто использовать модель свойств данных, чтобы проверить, не является ли она пустой. Это, однако, не работает.

Код выглядит следующим образом:

Страница бритвы бэкэнда:

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>
}

1 Ответ

1 голос
/ 07 июня 2019

Я не знаком с Razor Pages, но ожидаю (как и в случае с обычным MVC), что состояние не поддерживается во время нескольких вызовов.

Вы можете использовать MemoryCache для хранения DataModel в течение определенного времени.

...