"Операция недействительна из-за ошибки текущего состояния объекта во время обратной передачи

У меня была страница aspx, которая работала хорошо, но внезапно я получаю сообщение об ошибке "Операция недействительна из-за текущего состояния объекта". всякий раз, когда делается обратная передача.

Трассировка стека:

в System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
в System.Web.HttpValueCollection.FillFromEncodedBytes(байты [] байтов, Кодирование кодирования)
в System.Web.HttpRequest.FillInFormCollection()

Может кто-нибудь помочь?

Ответ 1

Кто-то разместил на вашей странице несколько полей формы. Новый макс по умолчанию, введенный последним обновлением безопасности, составляет 1000.

Попробуйте добавить следующий параметр в свой блок web.config <appsettings>. в этом блоке вы максимизируете значения MaxHttpCollection, это переопределит значения по умолчанию, установленные платформой .net. вы можете изменить значение соответственно в соответствии с вашими требованиями формы

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

Для получения дополнительной информации, пожалуйста, прочитайте эту статью. Для получения дополнительной информации о патче безопасности от Microsoft вы можете прочитать эту статью базы знаний

Ответ 2

Я не применял пейджинг в моем gridview, и он распространяется на более чем 600 записей (с флажком, кнопками и т.д.), а значение 2001 года не работает. Вы можете увеличить значение, скажем, 10000 и проверить.

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

Ответ 3

Для ASP.NET 1.1 это все равно из-за того, что кто-то публикует более 1000 полей формы, но параметр должен быть изменен в реестре, а не в файле конфигурации. Он должен быть добавлен как DWORD с именем MaxHttpCollectionKeys в реестр под

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>

Подробнее читайте this Microsoft kb article