Form Method.GET:仅显示查询字符串中的填充输入?

时间:2014-04-22 07:55:59

标签: asp.net html5 asp.net-mvc-4

我正在使用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>

1 个答案:

答案 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)