提交表单时不要包含空参数

Rud*_*dey 3 html asp.net url asp.net-mvc razor

我的控制器上的索引方法如下所示:

public ActionResult Index(string search, string sort, int? groupId)
Run Code Online (Sandbox Code Playgroud)

对于搜索功能,我有以下形式:

@using (Html.BeginForm())
{
    <div>
        @Html.Label("search", "Search")
        @Html.TextBox("search", ViewBag.Search as string)
        @Html.Hidden("sort", ViewBag.Sort as string)
        @Html.Hidden("groupId", ViewBag.GroupId as int?)
        <input type="submit" value="Search" />
    </div>
}
Run Code Online (Sandbox Code Playgroud)

Viewbag.Search,ViewBag.SortViewBag.GroupId包含最后使用的参数.这些可以是null"",当它们是,这是我在使用搜索表单时看到的URL:

...?search=foo&sort=&groupId=
Run Code Online (Sandbox Code Playgroud)

如何从URL隐藏这些空参数,看起来像...?search=foo什么?


编辑:正如Jason Nesbitt所说,您可以禁用隐藏字段以将其从表单中排除.但是,我还想隐藏来自除hidden字段之外的其他内容的空参数,例如常规input字段和select列表.

Jas*_*itt 10

如果你想坚持使用GET方法,你可以使用浏览器不会发送禁用字段的事实.因此绑定到onsubmit处理程序并禁用任何空的隐藏字段,如下所示:

@using (Html.BeginForm("Calculate", "Home", FormMethod.Get, new {onsubmit="DisableNullFields();"}))
{
    @Html.TextBoxFor(x => x.Test)
    <input type="text" name="TestField" />
    <input type="hidden" name="hidden" value="" />
    <input type="submit" value="Push"/>
}

<script>
    function DisableNullFields() {
        $('input[type=hidden]').each(function(i) {
            var $input = $(this);
            if ($input.val() == '')
               $input.attr('disabled', 'disabled');
        });
    }
</script>
Run Code Online (Sandbox Code Playgroud)

  • 好吧,当你第一个答案是你最初描述的问题的解决方案时,你已经完成了两次.非常糟糕的礼仪.我不打算为你做所有的工作.我已经指出了你正确的方向,你有责任弄清楚如何处理边缘情况.不要试图让我回来为你做更多的工作,取消我的答案是正确的.你是独自一人. (6认同)