Форма действия Url.Action отправить неверный routeValues - PullRequest
0 голосов
/ 21 июня 2019

Попытка сделать фильтр для таблицы, которая показывает некоторые продукты.

метод для View выглядит следующим образом:

public ActionResult BikeFilter(int? page, string SelectWheelSize, int? catId)
        {
            ....some code.....
        }

В базе данных у меня есть различные типы продуктов, и у каждого типа есть свой CategoryId. Например - велосипеды имеют CategoryId = 1.

это часть HTML:

<form class="form-filter" method="get" action="@Url.Action("BikeFiler", "Shop", new { catId = "1"})">
    <div class="form-inline filter">
        <label>Wheel size:</label>
        <select name="SelectWheelSize">
            <option selected></option>
            @foreach (var item in ViewBag.WheelSizes)
            {
                <option value="@item.Value">@item.Text</option>
            }
        </select>
        <input type="submit" value="Apply" class="btn btn-success btn-sm"/>
    </div>
</form>

Если пользователь не выбрал параметры для фильтрации и нажал «Применить» - он должен работать следующим образом: метод «public ActionResult BikeFilter ()» получает catId = 1 и делает SELECT из базы данных для всех продуктов, у которых CategoryId = 1.

Однако я получаю весь список товаров.

Я посмотрел в Debug и обнаружил, что catId имеет значение NULL.

В ActionLinks, как этот:

@Html.ActionLink("Bicycles","Bicycles","Shop", new {catId = "1"},new {@class = "nav-link"})
@Html.ActionLink("Scooters", "Scooters", "Shop", new { catId = "3" }, new { @class = "nav-link" })

работает отлично, и метод всегда получает правильный catId.

Что я делаю не так?

1 Ответ

0 голосов
/ 21 июня 2019

Если вы передадите параметры запроса в URL при отправке формы, параметр исчезнет. для получения дополнительной информации: отправка GET-формы с параметрами строки запроса и скрытыми параметрами исчезает Поэтому лучше передать значение catId в скрытом поле ввода.

<form class="form-filter" method="get" action="@Url.Action("BikeFilter", "Home")">
<input type="hidden" name="catId" value=1>
    <div class="form-inline filter">
        <label>Wheel size:</label>
        <select name="SelectWheelSize">
            <option selected></option>
            @foreach (var item in ViewBag.WheelSizes)
            {
                <option value="@item">@item</option>
            }
        </select>
        <input type="submit" value="Apply" class="btn btn-success btn-sm"/>
    </div>
</form>

DEMO

PS: если пользователь выбрал параметры для фильтрации сохранить значение фильтра в поле CatId.

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