Rajeshyadav12 Ответов: 1

Dropdownlist не содержит выбранного значения при использовании разбиения на страницы в .NET core 2.2


Не удерживает выбранное значение AA при использовании пагинации. При переходе на другую страницу dropdownlist перемещается в состояние All.

Использовал ViewBag для хранения текущего состояния фильтра, но безуспешно.

Понятия не имею, куда пойти и изменить код, чтобы заставить его работать. Может ли кто-нибудь просветить меня, как это сделать?

Что я уже пробовал:

Public async Task<IActionResult> Index(string searchText, string currentFilter, int? page)
    {

            int selectedPage = page ?? 1;
            int bypassCount = (selectedPage - 1) * _pagingOptions.PageSize;

            if (searchText != null)
            {
                page = 1;
            }
            else
            {
                searchText = currentFilter;

            }

            ViewBag.CurrentFilter = searchText;

    }


Индекс

<form asp-action="Index" method="get">

            <select class="custom-select" asp-for="searchText" value="@(ViewBag.CurrentFilter)">
                <option value="">All</option>
                <option value="AA">AA</option>
                <option value="AE">AE</option>
                <option value="AR">AR</option>
            </select>

         <div class="col-md-12">
            <button class="btn btn-primary" type="submit">Search</button>
         </div>                
        </form>

    <table class="table">
        <thead>
            <tr >
                <th>Resent</th>
                <th>Resent Date</th>
                <th>Created Date</th>
            </tr>
        </thead>
        <tbody>
            @if (Model.Items.TotalItemCount > 0)
            {
                @foreach (var item in Model.Items.ToList())
                {                     
                        <td>@Html.DisplayFor(modelItem => resentString)</td>
                        <td>@Html.DisplayFor(modelItem => resentDateString)</td>
                        <td>@Html.DisplayFor(modelItem => createdDateString)</td>
                    </tr>

                }
            }

        </tbody>
    </table>
</div>

            @if (Model.Items.PageCount > 1)
            {
                @Html.PagedListPager(Model.Items, page => Url.Action("Index", new { page = page, currentFilter = ViewBag.CurrentFilter})
            }

1 Ответов

Рейтинг:
5

Richard Deeming

Две проблемы:

1) То <select> бирка не содержит value атрибут. Вместо этого вы должны установить selected атрибут на выбранном <option> элемент.

<option value="AA" @(ViewBag.CurrentFilter == "AA" ? "selected" : "")>AA</option>
Досадно, если опция считается выбранной, если атрибут присутствует, независимо от значения, поэтому вам нужно полностью опустить атрибут на опциях, которые не должны быть выбраны.


2) Ссылки на пейджеры генерируют ссылки, а не отправляют форму. Если вы измените выбранное значение в списке, оно не будет отправлено на сервер.

Вам нужно будет использовать Javascript для обновления ссылок на страницы при изменении выбранного элемента; отправки формы при изменении выбранного элемента; или отправки формы при нажатии на ссылку страницы.

Либо это, либо найти способ сделать PagedListPager визуализируйте кнопки отправки вместо ссылок.