167 votes

'Erreur "L'opération n'est pas valide en raison de l'état actuel de l'objet" lors du postback'

J'avais une page aspx qui fonctionnait bien, mais soudainement je reçois l'erreur "L'opération n'est pas valide en raison de l'état actuel de l'objet." chaque fois qu'un postback est effectué.

La trace de la pile est:

à System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
à System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding)
à System.Web.HttpRequest.FillInFormCollection()

Est-ce que quelqu'un peut m'aider?

280voto

Devjosh Points 4428

Quelqu'un a posté assez de champs de formulaire sur votre page. La nouvelle limite par défaut introduite par la récente mise à jour de sécurité est de 1000.

Essayez d'ajouter le réglage suivant dans le bloc de votre web.config. dans ce bloc, vous maximisez les valeurs MaxHttpCollection, ce qui remplacera les valeurs par défaut définies par .NET Framework. Vous pouvez modifier la valeur en fonction de vos besoins en formulaires

Pour plus d'informations, veuillez lire ce post. Pour plus d'informations sur le correctif de sécurité de Microsoft, vous pouvez lire cet article de la base de connaissances

40voto

jay tapaoan Points 313

Je n'ai pas appliqué la pagination sur ma GridView et elle s'étend à plus de 600 enregistrements (avec des cases à cocher, des boutons, etc.) et la valeur de 2001 n'a pas fonctionné. Vous pouvez augmenter la valeur, disons 10000 et tester.

16voto

Dan Wich Points 2923

Pour ASP.NET 1.1, cela est toujours dû à quelqu'un postant plus de 1000 champs de formulaire, mais le réglage doit être modifié dans le registre plutôt que dans un fichier de configuration. Il doit être ajouté en tant que DWORD nommé MaxHttpCollectionKeys dans le registre sous

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

pour les éditions 32 bits de Windows, et

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

pour les éditions 64 bits de Windows.

6voto

Mandeep Janjua Points 896

Si votre trace de pile ressemble à ce qui suit, alors vous envoyez une grande quantité d'objets JSON au serveur

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)

Pour résoudre ce problème, veuillez mettre à jour votre fichier de configuration web avec la clé suivante. Si vous n'arrivez pas à obtenir la trace de la pile, veuillez utiliser Fiddler. Si cela ne vous aide toujours pas, veuillez essayer d'augmenter le nombre à 10000 ou quelque chose du genre

Pour plus de détails, veuillez lire cet article de support Microsoft

-2voto

Herman Schoenfeld Points 1480

Cela peut se produire si vous appelez

.SingleOrDefault()

sur un IEnumerable avec plus de 2 éléments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X