'在回发期间,由于对象的当前状态错误,操作无效

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

堆栈跟踪是:

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

有人可以帮忙吗?

有人张贴了相当多的表单域到您的页面。 最近的安全更新引入的新的默认最大值是1000。

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

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

欲了解更多信息,请阅读这篇文章。 有关Microsoft安全修补程序的更多信息,请参阅此知识库文章

我没有在我的GridView上应用分页,并且它扩展到600多条logging(带有checkbox,button等),2001的值不起作用。 你可以增加价值,比如说10000并testing。

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

对于ASP.NET 1.1,这仍然是由于有人张贴超过1000个表单字段,但必须在registry中更改该设置而不是configuration文件。 它应该被添加为registry下的一个名为MaxHttpCollectionKeys的DWORD

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0 

对于Windows的32位版本,以及

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

对于64位版本的Windows。

如果你的堆栈跟踪看起来像下面那么你正在发送一个巨大的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) 

为了解决,请用以下密钥更新您的networkingconfiguration。 如果您无法获得堆栈跟踪,请使用提琴手 。 如果仍然没有帮助,那么请尝试增加数量到10000什么的

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

有关更多详细信息,请阅读此 Microsoft文章