asp. net Core 3.1 Filter Form trigger refre sh страницы - PullRequest
0 голосов
/ 29 мая 2020

Я изо всех сил пытаюсь найти правильный способ достижения этой цели.

У меня есть представление, содержащее кучу данных. В верхней части представления я добавил форму с некоторыми параметрами для фильтрации. После того, как они нажмут «Отправить», я хочу вызвать вызов контроллера C#, чтобы отфильтровать данные и инициировать обновление страницы sh. Я смог сделать это без передачи каких-либо параметров, вызвав в окне refre sh через javascript. Но как только я пытался получить данные, введенные пользователем, я продолжал упираться в стену. При попытке перейти к javascript всегда загружалось начальное состояние модели. Поэтому я попытался изменить его, чтобы использовать форму, которая вызывает действие, которое работало на бэкэнде, но теперь оно просто выдает ошибку 500, когда возвращает представление, и я понятия не имею, почему.

Каков правильный способ делать что-то подобное?

Summary.cs html

@model SummaryModel

<!-- ... excluding content -->
<form id="form" asp-area="" asp-controller="Home" asp-action="refreshSummary">
    <div class="col-md-6">
        <div class="form-group">
            <label asp-for="EpicType" class="label-control"></label>
            <select asp-for="EpicType" class="form-control" asp-items="@QueryModel.EpicTypes"></select>
            <span asp-validation-for="EpicType" class="text-danger"></span>
        </div>
    </div>

    <p></p>
    <div class="form-group" style="align-content: center; text-align: center; padding-bottom: 5px;" ;>
        <button type="submit" id="submitbtn" class="btn btn-sm btn-primary rounded-0">Apply</button>
    </div>
</form>

<!-- ... excluding content -->

Остальная часть страницы просто отображает данные, не уверенные, что они имеют отношение к вопросу. При подаче заявки я хочу обновить страницу новыми отфильтрованными результатами.

HomeController.cs

/// <summary>
    /// Refreshes the list of epics based on filters
    /// </summary>
    /// <param name="FilterModel">filterData</param>
    /// <returns>result</returns>
    public IActionResult refreshSummary(SummaryModel filterData)
    {
        .. do filtering here ..

        filteredPorts.Sort();
        return View("Summary");
    }

Я успешно выполнил этот вызов. Но возврат - это когда выдается 500 ошибок, и я не понимаю в Visual Studio, почему. В автозагрузке у меня:

endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Summary}");

1 Ответ

0 голосов
/ 01 июня 2020

Ваш код предоставлен не полностью. Мы не можем точно знать, что вы сделали в действии refreshSummary.

Но ошибка 500 здесь заключается в том, что вы не re-bind указали соответствующий источник данных для select (@QueryModel.EpicTypes), когда вернулись в представление «Сводка».

При возврате к просмотру сводки вам необходимо вернуть значение @QueryModel.EpicTypes в качестве параметра и повторно привязать выбранный источник данных.

    public IActionResult refreshSummary(SummaryModel filterData)
    { 
        //  .. do filtering here ..
        filteredPorts.Sort();
        return View("Index", summary);//here summary contains @QueryModel.EpicTypes data
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...