ASP.NET表单可能太长,我们的服务器无法读取

时间:2012-05-23 21:21:43

标签: asp.net iis-7

我们有一个巨大的网格,我们有复选框和相同的文本框。

我们遇到了奇怪的行为,一个例子是底部的按钮确实会导致回发但是执行步骤调试会发现事件处理程序没有被调用。

所以我们将按钮移动到页面顶部,现在正在调用事件处理程序。

我们还注意到,在同一个请求中,如果我们检查顶部的一些项目和底部的一些项目,则顶部项目会更新,而底部项目则不会。

所以我们这样做了

        string strReturn = "";
        foreach (string strKey in Request.Form.AllKeys)
        {

            if (strKey.IndexOf(".x", 1) < 1 && strKey.IndexOf(".y", 1) < 1)
                strReturn += "<br> "  + strKey + " : " + Request.Form[strKey];
        }
        Response.Write(strReturn);

这是什么打印所有表格变量,结果是有一个截止。在查看源代码时,我们可以正确地看到表单元素(文本框,复选框),在提交它们时,我们的代码不会看到它们。所以在某些时候请求被截断,它会影响表单元素,包括我们上面讨论的按钮。

我们确实禁用了网格的viewstate,但它仍然无效。我们在我们的Web配置文件中也有这个以最大化请求大小,我们也使用它来进行文件上传     httpRuntime maxRequestLength =“2097151”executionTimeout =“300000000000”

我们知道我们的代码循环足够多次,但我们得到的值是null,因为它们在请求中不存在。

这适用于一台开发机器,但不适用于生产服务器或其他开发机器。

非常感谢任何帮助。

提前致谢。

1 个答案:

答案 0 :(得分:2)

我可能会遇到由here更新引起的问题。

  

Microsoft安全更新MS11-100限制了表单的最大数量   HTTP请求中的密钥,文件和JSON成员为1000。

如果您可以通过分页来减小网格的大小,那么可能会消除/缓解问题。否则,您可以增加web.config中的最大值

<configuration>
  <appSettings>
    <add key="aspnet:MaxHttpCollectionKeys" value="1000" />
  </appSettings>
</configuration>

更多信息here