【问题标题】:ASP.NET MVC checkboxes form GET long query stringASP.NET MVC 复选框形成 GET 长查询字符串
【发布时间】:2016-06-04 04:26:14
【问题描述】:

我正在使用 ASP.NET MVC,我有一个带有多个复选框控件(大约 200 个)的搜索表单,我使用 GET 请求发送此表单,因为我需要用户能够共享他们的搜索条件。问题是 MVC 为复选框生成了两次查询字符串参数(一次用于true,一次用于false)并且我的查询字符串很长(大约 7000 个字符),IIS 也阻止了我的查询太长的请求细绳。我找到了一种方法来告诉 IIS 使用本教程允许如此长的查询字符串值:HTTP 400 - Bad Request (Request Header too long)。如果我将我的应用程序上传到共享主机上,我将无法访问机器注册表,所以这个问题完全阻止了我。你有没有遇到过这样的问题,如果 - 你是如何解决的?谢谢!

【问题讨论】:

  • 200 个复选框?那还能用吗?似乎您需要找到另一种发送数据的方法 - 可能是一串 0 和 1 表示选中或未选中的内容,并在复选框上强制执行特定顺序?但是 200 个控件似乎只是一个无法使用的混乱。
  • 感谢您的回答,@mrunion。我实际上一直在考虑这个想法,但是如果我自己附加查询字符串,方法是使用 jQuery 附加到表单的提交事件,然后使用 window.location 重定向...,模型绑定器将停止绑定我的视图模型的属性,在控制器操作中指定为参数(无论我填写什么表单,视图模型属性始终具有默认值)。 PS。原来我“只有”96 个复选框
  • 您没有显示视图代码,但我假设您使用 @Html.CheckBoxFor() 生成 2 个输入 - <input type="checkbox" ... value="True" /><input type="hidden" ... value="False" /> 您可以手动创建创建 html 但发送那么多值无论如何,使用 GET 方法是个坏主意。

标签: c# asp.net-mvc checkbox


【解决方案1】:

如果您坚持拥有这么多从 UX 角度来看并不理想的复选框,那么这就是我的做法。

首先,我将表单操作切换为 POST 请求,这样您就不再有巨大的 GET 请求了。

将值绑定到一个简单的模型,然后将序列化的模型序列化并存储到具有唯一标识符的数据库中。然后,您将用户重定向到只有 GET 请求中的唯一标识符的结果。然后,您将能够快速从数据库中获取搜索条件并将其反序列化并返回搜索结果。

这意味着他们将能够共享结果,而无需进行大量长查询。

【讨论】:

    猜你喜欢
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多