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

标签 html asp.net asp.net-mvc url razor

我的 Controller 上的索引方法如下所示:

public ActionResult Index(string search, string sort, int? groupId)

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

@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>
}

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

...?search=foo&sort=&groupId=

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


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

最佳答案

如果您想坚持使用 GET 方法,您可以利用浏览器不会发送禁用字段这一事实。因此,绑定(bind)到 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>

关于html - 提交表单时不要包含空参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23656809/

相关文章:

css - 如何删除进程栏到父元素的距离

表格之间的 HTML 电子邮件空间(Gmail 和 Outlook)

c# - 如何在存储库中正确处理 Linq to SQL DataContext?

c# - 找不到 JobRunShell.cs

asp.net - 带条件的 Linq 计数

html - 使用 100% div 宽度,如果 50% 宽度太小

python - 格式化 HTML 标签

c# - 尝试激活 'Microsoft.AspNetCore.Identity.SignInManager` 时无法解析类型 'xxxxx.LoginModel' 的服务

html - 启用时更改复选框颜色

c# - EF 4 - 没有代理的延迟加载