【问题标题】:'Operation is not valid due to the current state of the object' error during postback回发期间的“由于对象的当前状态,操作无效”错误
【发布时间】:2012-02-08 14:06:45
【问题描述】:

我有一个运行良好的 aspx 页面,但突然我收到错误消息“由于对象的当前状态,操作无效。”每当回发完成时。

堆栈跟踪是:

在 System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
在 System.Web.HttpValueCollection.FillFromEncodedBytes(字节 [] 字节, 编码编码)
在 System.Web.HttpRequest.FillInFormCollection()

有人可以帮忙吗?

【问题讨论】:

标签: asp.net


【解决方案1】:

有人在您的页面上发布了很多表单域。最近的安全更新引入的新默认最大值为 1000。

尝试在 web.config 的 <appsettings> 块中添加以下设置。在此块中,您将最大化 MaxHttpCollection 值,这将覆盖 .net Framework 设置的默认值。您可以根据您的表单需要相应地更改值

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

欲了解更多信息,请阅读this 帖子。想更深入了解微软的安全补丁,你可以阅读this Knowledge base article

【解决方案2】:

我没有在我的 gridview 上应用分页,它扩展到超过 600 条记录(带有复选框、按钮等),并且 2001 的值不起作用。您可以增加该值,例如 10000 并进行测试。

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

【讨论】:

    【解决方案3】:

    对于 ASP.NET 1.1,这仍然是由于有人发布了 1000 多个表单字段,但必须在注册表中更改设置,而不是在配置文件中更改。它应该在注册表中添加为一个名为 MaxHttpCollectionKeys 的 DWORD

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0
    

    适用于 32 位版本的 Windows,并且

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0
    

    适用于 64 位版本的 Windows。

    【讨论】:

      【解决方案4】:

      如果您的堆栈跟踪如下所示,那么您正在向服务器发送大量 json 对象

      Operation is not valid due to the current state of the object. 
          at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
          at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
          at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
          at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
          at System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
          at Failing.Page_Load(Object sender, EventArgs e) 
          at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
          at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
          at System.Web.UI.Control.OnLoad(EventArgs e)
          at System.Web.UI.Control.LoadRecursive()
          at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
      

      如需解决,请使用以下密钥更新您的网络配置。如果您无法获取堆栈跟踪,请使用fiddler。如果仍然没有帮助,请尝试将数字增加到 10000 或其他值

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

      更多详情请阅读thisMicrosoft kb 文章

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-18
        相关资源
        最近更新 更多