Использование помощника по тегу asp-route- {variable} для массива - PullRequest
0 голосов
/ 23 января 2019

Я учусь у этого учебника ASP.NET Core Razor Pages , и я изо всех сил пытаюсь адаптировать его к своим потребностям. Для пагинационных ссылок сокращено до:

<a asp-page="./Index"
   asp-route-pageIndex="@(Model.Student.PageIndex + 1)"
   asp-route-currentFilter="@Model.CurrentFilter"
   class="btn btn-default">
    Next
</a>

Я не могу найти указания, как обрабатывать asp-route- {variable}, где variable (currentFilter в фрагменте) является массивом. Для моего случая, на мой взгляд, я настроил CurrentFilter, чтобы он представлял собой поле выбора с множественным свойством, которое отображается следующим образом в URL:

https://localhost/Student/?currentFilter=foo&currentFilter=bar

Который попадает в мою модель в виде строкового массива. Я не могу найти какую-либо документацию или решения о том, как использовать помощник тега asp-route для передачи массива в строку запроса.

1 Ответ

0 голосов
/ 23 января 2019

Временное решение, которое я испытываю, пока не получу отличный ответ ...

Я обновил свой CSHTML, чтобы использовать данные asp-all-route-data.

@{
    var nextParms = new Dictionary<string, string>();

    int x = 0;
    nextParms.Add("pageIndex", (Model.Mini.PageIndex + 1).ToString());
    foreach (string item in Model.CurrentFilter)
    {
        nextParms.Add("SearchString" + x, item);
        x++;
    }
}

<a asp-page="./Index"
   asp-all-route-data="nextParms"
   class="btn btn-default">
    Next
</a>

, тогда я восстанавливаю CurrentFilter, если у меня есть метод CurrentFilterN и нет метода CurrentFilter в моем методе OnGet.

        if (CurrentFilter !=null && CurrentFilter .Count()>0)
        {
            //Logic if CurrentFilter exists as normal
        }
        else
        {
           List<string> SearchList = new List<string>();

            foreach (var key in HttpContext.Request.Query)
            {
                if (key.Key.Contains("SearchString"))
                {
                    SearchList.Add(key.Value);
                    string IndividualTag = key.Value;
                }
                //Same logic as above
            }

            CurrentFilter = SearchList.ToArray();
        }

Таким образом, если пользователь использует множественный выбор, CurrentFilter устанавливается правильно.Если они нажимают следующее, SearchString0, SearchString1, ..., SearchStringN передаются в строке запроса, которая анализируется в CurrentFilter.

Чувствует себя хакером, но работает.

...