表单操作Url.Action发送不正确的routeValues

时间:2019-06-21 07:15:05

标签: c# html asp.net-mvc-5

试图对显示某些产品的表格进行过滤。

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并从数据库中对CategoryId = 1的所有产品进行SELECT。

但是我得到了整个产品列表。

我查看了Debug,发现catId的值为NULL。

在像这样的ActionLink中:

@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 :(得分:0)

如果在提交表单时在URL中传递查询参数,则该参数将消失。 有关更多信息: submitting a GET form with query string params and hidden params disappear 因此最好在隐藏的输入字段中传递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字段中的保存过滤器值。