Asp.Net MVC Controller продолжает добавлять значения в URL - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь отфильтровать таблицу в представлении индекса по определенным значениям, для этого я использую метод индекса [HttpGet], который создает 2 списка выбора (по одному для каждого типа фильтра).Предполагается, что кнопка фильтра берет выбранное значение каждого списка и отправляет их в метод индекса [HttpPost], который фильтрует таблицу.
Проблема в том, что она не "сбрасывает" URL-адрес, когда яфильтруется, поэтому он добавляет к URL каждый раз, когда я меняю фильтр.

Индекс Получить (Этот работает нормально)

        [HttpGet]
        public IActionResult Index()
        {
            IEnumerable<Lesson> Lessons = _LessonRepository.GetAll();
            ViewData["Types"] = GetTypesAsSelectList();
            ViewData["Difficulties"] = GetDifficultiesAsSelectList();
            return View(Lessons);
        }

Индекс Пост (Этот постоянно добавляет / Урок / Индекс каждый раз, когда я нажимаю кнопку фильтра в моем представлении)

       [HttpPost]
        public IActionResult Index(string filter, string filter2)
        {
            IEnumerable<Les> Lessons = null;
            if (filter == null && filter2 == null)
                Lessons = _LessonRepository.GetAll();
            else if (filter != null && filter2 == null)
            {
                Lessons = _LessonRepository.GetByDifficulty(filter);
            }
            else if (filter == null && filter2 != null)
            {
                Lessons = _LessonRepository.GetByType(filter2);
            }
            else if (filter != null && filter2 != null)
            {
                Lessons = _LessonRepository.GetByType(filter2).Where(l => l.Difficulty == filter);
            }
            ViewData["Types"] = GetTypesAsSelectList();
            ViewData["Difficulties"] = GetDifficultiesAsSelectList();
            return View(Lessons);
        }

Просмотр

<form action="Lesson/Index/" method="post">
    <div class="form-inline">
        <select id="difficulties" name="filter" asp-items="@ViewData["Difficulties"] as List<SelectListItem>" class="form-control">
            <option value="">-- Select difficulty --</option>
        </select>

        <select id="types" name="filter2" asp-items="@(ViewData["Types"] as List<SelectListItem>)" class="form-control">
            <option value="">-- Select type --</option>
        </select>
        <button type="submit">Filter</button>
    </div>
</form>

1 Ответ

0 голосов
/ 07 марта 2019

Это происходит потому, что атрибут action в теге form содержит относительный URL.Полученный URL-адрес запроса current url + relative url, и поэтому Lesson/Index/ добавляется к текущему URL-адресу по запросу.Попробуйте использовать абсолютный URL, добавив / в начале

<form action="/Lesson/Index/" method="post">

Поскольку вы используете ASP.NET Core, вы также можете использовать asp-action и asp-controller

<form asp-action="Index" asp-controller="Lesson" method="post">

Или вы можете придерживаться относительного URL, но вам нужно подумать о том, как получается полученный URL.Так что, если ваша форма находится в режиме /Lesson/Index, то можете использовать следующее действие

<!-- empty action, or you can just remove the attribute completely -->
<form action="" method="post"> 

Это даст вам current url + relative url = "/Lesson/Index" + "" = "/Lesson/Index"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...