【问题标题】:form action Url.Action send incorrect routeValues表单动作 Url.Action 发送不正确的 routeValues
【发布时间】:2019-11-04 00:27:07
【问题描述】:

尝试对显示一些产品的表格进行过滤。

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 的所有产品进行选择。

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

我查看了 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。

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    如果在提交表单时在 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 字段中保存过滤器值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多