我正在使用ASP.NET MVC应用程序并拥有一个数据表。在数据表上方,我有一个带有各种输入的表单来过滤表格。
表单使用GET
方法将表单数据传输到服务器,工作正常,但即使我只想过滤一件事(例如制造商名称),所有其他输入参数都是发布到查询字符串中也是如此!像这样:
http://localhost/mysite/page1?Tab=Pending&SortBy=&SortAscending=False&Manufacturer=Toyota&Model=&RegNumberFilter=
正如您所看到的,我只填充了制造商,但其他所有内容都已提交!有没有一种简单的方法可以清理我的URL,以便只在查询字符串中显示已设置的过滤器?
我的过滤表格如下:
<div class="panel-body">
@using (Html.BeginForm("Index", "page1", FormMethod.Get, new { @role = "form", @class = "form-inline" }))
{
@Html.Hidden("Tab", Model.Tab);
@Html.Hidden("SortBy", Model.SortBy);
@Html.Hidden("SortAscending", Model.SortAscending);
<div class="form-group">
<label class="sr-only" for="Manufacturer">Manufacturer</label>
@Html.TextBoxFor(x => x.Manufacturer, new { @class = "form-control", @placeholder = "Manufacturer" })
</div>
<div class="form-group">
<label class="sr-only" for="model">Model</label>
@Html.DropDownListFor(x => x.model, Model.model, new { @class = "form-control" })
</div>
<div class="form-group">
<label class="sr-only" for="RegNumberFilter">Reg Number</label>
@Html.TextBoxFor(x => x.RegNumberFilter, new { @class = "form-control", @placeholder = "Reg Number" })
</div>
<div class="btn-toolbar" role="toolbar">
<input type="button" class="btn btn-default" onclick="clear_form_elements(this.form)" value="Clear Filter" />
<button type="submit" class="btn btn-primary">Apply</button>
</div><!-- .btn-toolbar -->
}
</div>
答案 0 :(得分:1)
假设你仍然在寻找这个问题的答案,就像我一样,我现在已经非常快速而粗略地处理了这样一个案例。
function submitSearch() {
$('#tblSearchForm input[type="text"]').each(function () { if (this.value == "") this.remove(); });
$('#tblSearchForm select').each(function () { if (this.selectedOptions.length > 0 && this.selectedOptions[0].value == "") this.selectedIndex = -1; });
}
在包含htmlAttributes的形式的匿名对象中只包括:
onSubmit = "submitSearch()"
作为额外的键/值。
它既快又脏,但它能很好地完成工作。可能有比大锤更好的东西&#34; this.remove()&#34;我很乐意使用更合适的东西。
编辑: 对于那些必须提供IE8兼容性的人来说, this.remove()将无效...请使用 this.parentNode.removeChild(this)