表单操作 Url.Action 发送不正确的路由值
form action Url.Action send incorrect routeValues
正在尝试对显示一些产品的 table 进行筛选。
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>
如果用户没有选择过滤选项并点击 "Apply" - 它应该像这样工作:方法 "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。
我做错了什么?
如果在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>
PS: 如果用户选择了过滤选项,则在 CatId 字段中保存过滤值。
正在尝试对显示一些产品的 table 进行筛选。
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>
如果用户没有选择过滤选项并点击 "Apply" - 它应该像这样工作:方法 "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。
我做错了什么?
如果在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>
PS: 如果用户选择了过滤选项,则在 CatId 字段中保存过滤值。