'Operasi tidak valid karena kesalahan objek saat ini' selama postback

170

Saya memiliki halaman aspx yang berfungsi dengan baik, tetapi tiba-tiba saya mendapatkan kesalahan "Operasi tidak valid karena keadaan objek saat ini." setiap kali postback dilakukan.

Jejak tumpukan adalah:

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

Adakah yang bisa membantu?

Muthukumar
sumber

Jawaban:

281

Seseorang memposting beberapa kolom formulir ke halaman Anda. Maks default baru yang diperkenalkan oleh pembaruan keamanan terbaru adalah 1000.

Coba tambahkan pengaturan berikut di <appsettings>blok web.config Anda . di blok ini Anda memaksimalkan nilai MaxHttpCollection ini akan menimpa default yang ditetapkan oleh .net Framework. Anda dapat mengubah nilai sesuai kebutuhan formulir Anda

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

Untuk informasi lebih lanjut silakan baca posting ini . Untuk informasi lebih lanjut tentang patch keamanan oleh microsoft Anda dapat membaca artikel Pangkalan Pengetahuan ini

Devjosh
sumber
40

Saya tidak menerapkan paging pada gridview saya dan meluas ke lebih dari 600 catatan (dengan kotak centang, tombol, dll.) Dan nilai tahun 2001 tidak berfungsi. Anda dapat meningkatkan nilainya, katakan 10.000 dan uji.

<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
jay tapaoan
sumber
16

Untuk ASP.NET 1.1, ini masih karena seseorang memposting lebih dari 1000 bidang formulir, tetapi pengaturan harus diubah dalam registri daripada file konfigurasi. Itu harus ditambahkan sebagai DWORD bernama MaxHttpCollectionKeys dalam registri di bawah

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

untuk Windows edisi 32-bit, dan

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

untuk Windows edisi 64-bit.

Dan Wich
sumber
6

Jika jejak stack Anda terlihat seperti berikut, maka Anda mengirim banyak objek json ke 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)

Untuk resolusi, harap perbarui konfigurasi web Anda dengan tombol berikut. Jika Anda tidak bisa mendapatkan jejak tumpukan maka silakan gunakan fiddler . Jika masih tidak membantu maka silakan coba tambahkan angkanya menjadi 10.000 atau apalah

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

Untuk lebih jelasnya, silahkan baca ini artikel kb Microsoft

Mandeep Janjua
sumber