Fehler 'Operation ist aufgrund des aktuellen Status des Objekts ungültig' während des Postbacks

170

Ich hatte eine Aspx-Seite, die gut funktionierte, aber plötzlich erhalte ich die Fehlermeldung "Der Vorgang ist aufgrund des aktuellen Status des Objekts nicht gültig." wann immer ein Postback gemacht wird.

Die Stapelverfolgung lautet:

at System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()
at System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] Bytes, Codierungscodierung)
at System.Web.HttpRequest.FillInFormC

Kann jemand helfen?

Muthukumar
quelle

Antworten:

281

Jemand hat einige Formularfelder auf Ihrer Seite veröffentlicht. Das neue Standardmaximum, das durch das letzte Sicherheitsupdate eingeführt wurde, ist 1000.

Versuchen Sie, die folgende Einstellung in den <appsettings>Block Ihrer web.config einzufügen . In diesem Block maximieren Sie die MaxHttpCollection-Werte. Dadurch werden die von .net Framework festgelegten Standardeinstellungen überschrieben. Sie können den Wert entsprechend Ihren Formularanforderungen ändern

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

Für weitere Informationen lesen Sie bitte diesen Beitrag. Weitere Informationen zum Sicherheitspatch von Microsoft finden Sie in diesem Knowledge Base-Artikel

Devjosh
quelle
40

Ich habe kein Paging auf meine Rasteransicht angewendet und es erstreckt sich auf mehr als 600 Datensätze (mit Kontrollkästchen, Schaltflächen usw.), und der Wert von 2001 hat nicht funktioniert. Sie können den Wert erhöhen, z. B. 10000, und testen.

<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
Jay Tapaoan
quelle
16

Für ASP.NET 1.1 liegt dies immer noch daran, dass jemand mehr als 1000 Formularfelder veröffentlicht. Die Einstellung muss jedoch in der Registrierung und nicht in einer Konfigurationsdatei geändert werden. Es sollte als DWORD mit dem Namen MaxHttpCollectionKeys in der Registrierung unter hinzugefügt werden

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

für 32-Bit-Editionen von Windows und

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

für 64-Bit-Editionen von Windows.

Dan Wich
quelle
6

Wenn Ihre Stapelverfolgung wie folgt aussieht, senden Sie eine große Menge von JSON-Objekten an den Server

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)

Zur Lösung aktualisieren Sie bitte Ihre Webkonfiguration mit dem folgenden Schlüssel. Wenn Sie den Stack-Trace nicht erhalten können, verwenden Sie bitte Fiddler . Wenn es immer noch nicht hilft, versuchen Sie bitte, die Zahl auf 10000 oder so zu erhöhen

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

Weitere Informationen finden Sie in diesem Microsoft KB-Artikel

Mandeep Janjua
quelle