Erro 'A operação não é válida devido ao estado atual do objeto' durante a postagem


170

Eu tinha uma página aspx que estava funcionando bem, mas de repente estou recebendo o erro "A operação não é válida devido ao estado atual do objeto". sempre que uma postagem for feita.

O rastreamento de pilha é:

em System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()
em System.Web.HttpValueCollection.FillFromEncodedBytes (bytes [Byte [] bytes, codificação de codificação)
em System.Web.HttpRequest.FillInFormCollection ()

Alguém pode ajudar?


Respostas:


281

Alguém postou alguns campos de formulário em sua página. O novo máximo padrão introduzido pela atualização de segurança recente é 1000.

Tente adicionar a seguinte configuração no <appsettings>bloco do seu web.config . neste bloco, você está maximizando os valores MaxHttpCollection, isto substituirá os padrões definidos pelo .net Framework. você pode alterar o valor de acordo com as necessidades do formulário

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

Para mais informações, leia este post. Para obter mais informações sobre o patch de segurança da microsoft, leia este artigo da Base de conhecimento.



40

Não apliquei a paginação no meu gridview e ele se estende a mais de 600 registros (com caixa de seleção, botões etc.) e o valor de 2001 não funcionou. Você pode aumentar o valor, digamos 10000 e testar.

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

16

Para o ASP.NET 1.1, isso ainda ocorre devido a alguém postar mais de 1000 campos de formulário, mas a configuração deve ser alterada no registro, e não em um arquivo de configuração. Ele deve ser adicionado como um DWORD chamado MaxHttpCollectionKeys no registro em

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

para edições de 32 bits do Windows e

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

para edições de 64 bits do Windows.


6

Se o seu rastreamento de pilha se parecer com o seguinte, você estará enviando uma enorme carga de objetos json para o servidor

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)

Para resolução, atualize sua configuração da web com a seguinte chave. Se você não conseguir obter o rastreamento da pilha, use o violinista . Se ainda assim não ajudar, tente aumentar o número para 10000 ou algo assim

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

Para mais detalhes, leia este artigo da Microsoft kb

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.