сортировка и фильтрация в основных страницах бритвы asp.net - PullRequest
0 голосов
/ 06 ноября 2018

Я следую учебному пособию по работе с данными в ASP.NET Core в документации Microsoft, (раздел «Сортировка, фильтр, страницы и группы») , но мне трудно понять, как выполнить следующее код работает ... (я новичок в бритвенных страницах и ядре asp.net).

это страница PageModel для студентов.

namespace Contoso.Pages.Students
{
    public class IndexModel : PageModel
    {
       //

        public string NameSort { get; set; }
        public string DateSort { get; set; }
        public string CurrentFilter { get; set; }
        public string CurrentSort { get; set; }


        public async Task OnGetAsync(string sortOrder,string currentFilter, string searchString, int? pageIndex)
        {
            CurrentSort = sortOrder;
            NameSort = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
            DateSort = sortOrder == "Date" ? "date_desc" : "Date";
            if (searchString != null)
            {
                pageIndex = 1;
            }
            else
            {
                searchString = currentFilter;
            }

            CurrentFilter = searchString;

            IQueryable<Student> studentIQ = from s in _context.Students
                                            select s;
            if (!String.IsNullOrEmpty(searchString))
            {
                studentIQ = studentIQ.Where(s => s.LastName.Contains(searchString)
                                       || s.FirstMidName.Contains(searchString));
            }
            switch (sortOrder)
            {
                case "name_desc":
                    studentIQ = studentIQ.OrderByDescending(s => s.LastName);
                    break;
                case "Date":
                    studentIQ = studentIQ.OrderBy(s => s.EnrollmentDate);
                    break;
                case "date_desc":
                    studentIQ = studentIQ.OrderByDescending(s => s.EnrollmentDate);
                    break;
                default:
                    studentIQ = studentIQ.OrderBy(s => s.LastName);
                    break;
            }

        }
    }
}

и это от на странице индекса для модели.

@*other markup commented out*@
<table class="table">
    <thead>
        <tr>
            <th>
                <a asp-page="./Index" asp-route-sortOrder="@Model.NameSort"
                   asp-route-currentFilter="@Model.CurrentFilter">
                    @Html.DisplayNameFor(model => model.Student[0].LastName)
                </a>
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Student[0].FirstMidName)
            </th>
            <th>
                <a asp-page="./Index" asp-route-sortOrder="@Model.DateSort"
                   asp-route-currentFilter="@Model.CurrentFilter">
                    @Html.DisplayNameFor(model => model.Student[0].EnrollmentDate)
                </a>
            </th>
            <th></th>
        </tr>
    </thead>
</table>

@*other markup commented out*@

Теперь мой вопрос: как, например, asp-route-sortOrder="@Model.NameSort" относится к параметру sortOrder в методе OnGetAsync? и как точно установить значение sortOrder, нажав на ссылку на странице индекса?

1 Ответ

0 голосов
/ 06 ноября 2018

как asp-route-sortOrder="@Model.NameSort" связан с параметром sortOrder в методе OnGetAsync?

Атрибут route в помощнике тега select позволяет указывать значения параметров данных маршрута. Если ключ (sortOrder в этом случае) включен как часть шаблона маршрута, значение будет отображаться как сегмент в сгенерированном URL. В противном случае он добавляется к URL-адресу как значение строки запроса. Они сопоставляются с методами-обработчиками посредством привязки модели. Вы можете узнать больше о том, как работает привязка модели в Razor Pages здесь: https://www.learnrazorpages.com/razor-pages/model-binding

...