Saya mendapatkan kesalahan berikut ketika saya memposting kembali halaman dari sisi klien. Saya memiliki kode JavaScript yang mengubah asp: ListBox di sisi klien.
Bagaimana cara kita memperbaikinya?
Detail kesalahan di bawah:
Server Error in '/XXX' Application.
--------------------------------------------------------------------------------
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.]
System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +2132728
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
System.Web.UI.WebControls.ListBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +274
System.Web.UI.WebControls.ListBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +353
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1194
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.1433; ASP.NET Version:2.0.50727.1433
Jawaban:
Masalahnya adalah bahwa ASP.NET tidak mengetahui tentang listitem tambahan atau dihapus ini. Anda mendapat sejumlah opsi (tercantum di bawah):
Saya harap ini membantu.
sumber
Apakah Anda memiliki kode dalam Page_Load acara Anda? jika ya, maka mungkin dengan menambahkan yang berikut ini akan membantu.
Kesalahan ini dilemparkan ketika Anda mengklik perintah Anda dan Page_load sedang dijalankan lagi, dalam siklus hidup normal akan Page_Load -> Klik pada Command -> Page_Load (lagi) -> Proses ItemCommand Event
sumber
Saya punya pengalaman dengan DataGrid. Salah satu kolomnya adalah tombol "Pilih". Ketika saya mengklik tombol "Pilih" dari setiap baris saya telah menerima pesan kesalahan ini:
Saya mengubah beberapa kode, dan akhirnya saya berhasil. Rute pengalaman saya:
1) Saya mengubah atribut halaman menjadi
EnableEventValidation="false"
. Tapi itu tidak berhasil. (tidak hanya berbahaya karena alasan keamanan, event handler saya tidak dipanggil:void Grid_SelectedIndexChanged(object sender, EventArgs e)
2) Saya menerapkan
ClientScript.RegisterForEventValidation
metode Render. Tapi itu tidak berhasil.3) Saya mengubah jenis tombol di kolom kisi dari
PushButton
menjadiLinkButton
. Berhasil! ("ButtonType =" LinkButton "). Saya pikir jika Anda dapat mengubah tombol Anda ke kontrol lain seperti" LinkButton "dalam kasus lain, itu akan berfungsi dengan baik.sumber
Button
tidak bekerja ketikalinkButton
bekerja di program yang sama. Jika demikian, apakah kita harus selalu menggunakannyalinkButton
? Bagaimana kita bisa membuat lebih fleksibel?Anda benar-benar ingin melakukan 2 atau 3, jangan menonaktifkan validasi acara.
Ada dua masalah utama dengan menambahkan item ke asp: sisi klien listbox.
Yang pertama adalah bahwa hal itu mengganggu validasi acara. Apa yang kembali ke server bukan apa yang diturunkannya.
Yang kedua adalah bahwa bahkan jika Anda menonaktifkan validasi acara, ketika halaman Anda diposkan kembali item dalam kotak daftar akan dibangun kembali dari kondisi tampilan, sehingga setiap perubahan yang Anda buat pada klien hilang. Alasan untuk ini adalah bahwa asp.net tidak mengharapkan konten dari listbox yang akan diubah pada klien, itu hanya mengharapkan pemilihan yang akan dibuat, sehingga membuang setiap perubahan yang mungkin Anda buat.
Opsi terbaik kemungkinan besar menggunakan panel pembaruan seperti yang telah direkomendasikan. Opsi lain, jika Anda benar-benar perlu melakukan sisi klien ini, adalah menggunakan yang lama dan
<select>
bukan<asp:ListBox>
, dan untuk menyimpan daftar item Anda di bidang yang tersembunyi. Saat halaman ditampilkan di klien, Anda dapat mengisinya dari sebagian konten bidang teks Anda.Kemudian, ketika Anda siap mempostingnya, Anda mengisi kembali konten bidang yang tersembunyi dari modifikasi Anda
<select>
. Kemudian, tentu saja, Anda harus membaginya lagi di server dan melakukan sesuatu dengan item Anda, karena pilih Anda kosong sekarang sudah kembali di server.Semua dalam semua itu adalah solusi yang cukup rumit yang saya tidak akan merekomendasikan, tetapi jika Anda benar-benar harus melakukan modifikasi sisi-klien dari listBox, itu berfungsi. Saya benar-benar akan merekomendasikan Anda melihat ke dalam Panel pembaruan sebelum pergi rute ini, namun.
sumber
<select>
, yang memecahkan masalah. Bisakah Anda memberi tahu saya mengapa Updatepanel mengambil banyak waktu untuk memuat data bila dibandingkan dengan beban data ajax sisi klien.?Saya memiliki masalah yang sama dengan Repeater karena saya memiliki halaman web dengan kontrol Repeater di situs web yang EnableEventValidation dihidupkan. Itu tidak baik. Saya mendapatkan pengecualian terkait postback yang tidak valid.
Apa yang berhasil bagi saya adalah mengatur EnableViewState = "false" untuk Pengulang. Keuntungannya adalah lebih mudah digunakan, sesederhana mengalihkan validasi acara untuk situs web atau halaman web, tetapi cakupannya jauh lebih sedikit daripada menonaktifkan validasi acara untuk keduanya.
sumber
Tak satu pun dari yang di atas bekerja untuk saya. Setelah menggali lebih lanjut, saya menyadari bahwa saya telah mengabaikan 2 formulir yang diterapkan pada halaman yang menyebabkan masalah.
Ketahuilah bahwa baru-baru ini ASP.NET telah mulai mempertimbangkan iframe di dalam tag formulir yang berisi tag formulir di dokumen iframe itu sendiri sebuah kerangka bersarang. Saya harus memindahkan iframe dari tag formulir untuk menghindari kesalahan ini.
sumber
Saya memiliki masalah yang sama ketika memodifikasi ListBox menggunakan JavaScript pada klien. Itu terjadi ketika Anda menambahkan item baru ke ListBox dari klien yang tidak ada di sana saat halaman diberikan.
Perbaikan yang saya temukan adalah untuk menginformasikan sistem validasi acara dari semua item valid yang mungkin yang dapat ditambahkan dari klien. Anda melakukan ini dengan mengesampingkan Page.Render dan memanggil Page.ClientScript.RegisterForEventValidation untuk setiap nilai yang bisa ditambahkan oleh JavaScript Anda ke kotak daftar:
Ini bisa agak menyebalkan jika Anda memiliki sejumlah besar nilai yang berpotensi valid untuk kotak daftar. Dalam kasus saya, saya memindahkan item di antara dua ListBoxes - yang memiliki semua nilai yang mungkin dan yang lainnya kosong tetapi diisi dengan subset nilai dari yang pertama di JavaScript saat pengguna mengklik tombol. Dalam hal ini Anda hanya perlu mengulang item di ListBox pertama dan mendaftarkan masing-masing dengan kotak daftar kedua:
sumber
Satu cara lain yang tidak disebutkan di sini adalah dengan subclass ListBox
Yaitu.
ClientEventValidation kunci dari atribut System.Web.UI.SupportsEventValidation jika Anda subkelas, kecuali jika Anda secara eksplisit menambahkannya kembali, itu tidak akan pernah memanggil rutin validasi. Itu bekerja dengan kontrol apa pun, dan merupakan satu-satunya cara yang saya temukan untuk "menonaktifkannya" pada kontrol dengan kontrol (Yaitu, bukan tingkat halaman).
sumber
Anda mencoba sesuatu seperti itu, di halaman .aspx Anda
Menambahkan
Anda merasa bebas untuk bertanya!
sumber
Jika Anda mengisi DropdownList melalui skrip sisi klien lalu kosongkan daftar sebelum mengirimkan formulir kembali ke server; maka ASP.NET tidak akan mengeluh dan keamanan akan tetap menyala.
Dan untuk mendapatkan data yang dipilih dari DDL, Anda dapat melampirkan acara "OnChange" ke DDL untuk mengumpulkan nilai dalam Input tersembunyi atau dalam kotak teks dengan Style = "display: none;"
sumber
Saya berharap saya bisa memilih Anda, Amir (sayangnya perwakilan saya terlalu rendah.) Saya hanya mengalami masalah ini dan mengubah ini bekerja seperti juara di gridview saya. Sebentar lagi, saya pikir kode yang valid adalah: ButtonType = "Link"
Saya menduga ini karena ketika Anda mengklik 'edit', edit Anda berubah menjadi 'pembaruan' dan 'batal' yang kemudian berubah kembali menjadi 'edit' saat mengirim. Dan kontrol bergeser ini membuat .net tidak nyaman.
sumber
(1) EnableEventValidation = "false" ................... Tidak berfungsi untuk saya.
(2) ClientScript.RegisterForEventValidation .... Tidak berfungsi untuk saya.
Solusi 1:
Ubah Tombol / ImageButton ke LinkButton di GridView. Berhasil. (Tapi saya suka ImageButton)
Penelitian: Tombol / ImageButton dan LinkButton menggunakan metode yang berbeda untuk mengirim kembali
Artikel asli:
http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx
Solusi 2:
Di OnInit (), masukkan kode seperti ini untuk menetapkan ID unik untuk Tombol / ImageButton:
Artikel asli:
http://www.c-sharpcorner.com/Forums/Thread/35301/
sumber
Saya menerapkan tampilan grid bersarang dan saya menghadapi masalah yang sama. Saya telah menggunakan LinkButton alih-alih tombol gambar seperti ini:
sebelum saya memiliki kolom seperti ini:
Saya telah mengganti seperti ini.
sumber
Saya memiliki masalah serupa, tetapi saya tidak menggunakan ASP.Net 1.1 atau memperbarui kontrol melalui javascript. Masalah saya hanya terjadi pada Firefox dan bukan pada IE (!).
Saya menambahkan opsi ke DropDownList pada acara PreRender seperti ini:
"HF" (hiddenfield) saya memiliki opsi yang dipisahkan oleh baris baru, seperti ini:
Masalahnya adalah bahwa halaman HTML rusak (maksud saya memiliki baris baru) pada opsi "pilih" yang mewakili DropDown.
Jadi saya menyelesaikan masalah saya dengan menambahkan satu baris:
Semoga ini bisa membantu seseorang.
sumber
jika Anda mengubah
UseSubmitBehavior="True"
keUseSubmitBehavior="False"
masalah Anda akan terpecahkansumber
Saya memiliki masalah yang sama, apa yang saya lakukan:
Baru saja menambahkan kondisi
if(!IsPostBack)
dan berfungsi dengan baik :)sumber
Kesalahan ini akan ditampilkan tanpa pos balik
Tambahkan kode:
sumber
Dalam hal ini, tambahkan id ke tombol di RowDataBound dari kisi. Itu akan menyelesaikan masalah Anda.
sumber
Solusi sederhana untuk masalah ini adalah dengan menggunakan pemeriksaan IsPostBack pada pemuatan halaman Anda. Itu akan menyelesaikan masalah ini.
sumber
Ajax UpdatePanel membuatnya, dan saya pikir itu cara termudah , mengabaikan overhead postback Ajax .
sumber
Saya tahu bahwa ini adalah pos yang sangat lama. Dengan asumsi bahwa Anda memanggil aplikasi Anda, berikut adalah ide yang berhasil bagi saya:
Jika Anda tidak memerlukan kontrol total, Anda dapat menggunakan panel pembaruan yang akan melakukan ini untuk Anda.
sumber
Kami mengalami masalah yang sama ketika kami mengonversi halaman ASPX biasa ke halaman Konten.
Halaman dengan masalah ini memiliki
</form>
tag di dalam salah satu bagian Konten, sehingga dua tag akhir formulir diberikan pada waktu berjalan yang menyebabkan masalah ini. Menghapus tag ujung formulir ekstra dari halaman menyelesaikan masalah ini.sumber
<form>
bidang tambahan dalam kode saya juga.Jika Anda menggunakan kisi-kisi dan tidak mengikat kisi-kisi di pageload di dalam! Ispostback maka kesalahan ini terjadi ketika Anda mengklik edit dan menghapus baris di kisi-kisi.
sumber
Empat menit yang lalu saya menerima kesalahan yang sama. Maka saya telah meneliti selama setengah jam seperti Anda. Di semua forum mereka umumnya mengatakan "add page enableEvent .. = false atau true". Solusi apa pun yang diajukan tidak menyelesaikan masalah saya sampai saya menemukannya. Masalahnya sayangnya tombol ASP.NET. Saya menghapusnya dua detik yang lalu. Saya mencoba mengganti dengan "imagebutton", tetapi juga tidak dapat diterima (karena memberikan kesalahan yang sama).
Akhirnya saya ganti dengan
LinkButton
. tampaknya berhasil!sumber
Saya menggunakan datalist dan saya mendapatkan kesalahan yang sama untuk tombol push saya. Saya hanya menggunakan IsPostBack untuk memeriksa dan mengisi kontrol saya dan masalahnya selesai! Bagus!!!
sumber
Apa yang berhasil bagi saya adalah memindahkan kode berikut dari page_load ke page_prerender:
sumber
Opsi terbaik untuk dilakukan adalah menggunakan bidang tersembunyi dan tidak menonaktifkan validasi acara, juga mengubah setiap kotak daftar, dropdownlist untuk memilih dengan atribut server runat
sumber
Jika Anda menggunakan panel pembaruan Ajax. Tambahkan
<Triggers>
tag dan di dalamnya memicu Tombol atau kontrol yang menyebabkan postBack menggunakan<asp:PostBackTrigger .../>
sumber
Jika Anda tahu di muka data yang dapat diisi, Anda dapat menggunakan ClientScriptManager untuk menyelesaikan masalah ini. Saya memiliki masalah ini ketika secara dinamis mengisi drop down box menggunakan javascript pada pilihan pengguna sebelumnya.
Berikut adalah beberapa contoh kode untuk mengganti metode render (dalam VB dan C #) dan mendeklarasikan nilai potensial untuk dropdownlist ddCar.
Dalam VB:
atau sedikit variasi dalam C # bisa menjadi:
Untuk pemula: Ini harus masuk dalam kode di belakang file (.vb atau .cs) atau jika digunakan dalam file aspx Anda dapat membungkus
<script>
tag.sumber
Inilah alasan mengapa saya mendapatkannya:
Saya punya ASP: ListBox. Awalnya itu disembunyikan. Di sisi klien saya akan mengisinya melalui AJAX dengan opsi. Pengguna memilih satu opsi. Kemudian ketika mengklik tombol Kirim, Server akan mendapatkan semua lucu tentang ListBox, karena tidak ingat itu memiliki opsi.
Jadi yang saya lakukan adalah memastikan saya menghapus semua opsi daftar sebelum mengirimkan formulir kembali ke server. Dengan cara itu server tidak mengeluh karena daftar pergi ke klien kosong dan kembali kosong.
Diurutkan !!!
sumber