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

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

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

at Система.Сеть.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()
в системе.Сеть.HttpValueCollection.FillFromEncodedBytes (байт [] байт, Encoding encoding)
at Система.Сеть.Класса HttpRequest.FillInFormCollection ()

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

4 ответов


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

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

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

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


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

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET.1.4322.0

для 32-разрядных версий Windows, и

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET.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)

для разрешения обновите веб-конфигурацию следующим ключом. Если вы не можете получить трассировку стека, пожалуйста, используйте Саша. Если это не помогло, то попробуйте увеличить это количество до 10000 или что-то

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

для больше деталей, пожалуйста прочитайте этой статья Microsoft kb