Argumen postback atau callback tidak valid. Validasi acara diaktifkan menggunakan '<pages enabledEventValidation = “true” />'

238

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
Julius A
sumber
Jangan melakukan databind di acara page_load.
Paul Zahra

Jawaban:

171

Masalahnya adalah bahwa ASP.NET tidak mengetahui tentang listitem tambahan atau dihapus ini. Anda mendapat sejumlah opsi (tercantum di bawah):

  • Nonaktifkan eventvalidation (ide buruk, karena Anda kehilangan sedikit keamanan yang datang dengan biaya yang sangat sedikit).
  • Gunakan ASP.NET Ajax UpdatePanel. (Letakkan listbox di Updatepanel dan memicu pembaruan, jika Anda menambah atau menghapus listbox. Dengan cara ini kondisi tampilan dan bidang terkait mendapatkan pembaruan dan validasi acara akan berlalu.)
  • Lupakan sisi klien dan gunakan postback klasik dan tambahkan atau hapus listitems sisi server.

Saya harap ini membantu.

Norbert B.
sumber
Satu lagi opsi: mengimplementasikan IPostBackEventHandler dan memanggil js __doPostBack ('<% = UniqueId.ToString ()%>', arg)
gdbdable
Berdasarkan saran di atas, saya meletakkan dropdown saya di ASP.NET asp reguler: UpdatePanel, memuat dropdown dalam kode di belakang dan kemudian upNewRecord.Update ();
Ricardo Appleton
183

Apakah Anda memiliki kode dalam Page_Load acara Anda? jika ya, maka mungkin dengan menambahkan yang berikut ini akan membantu.

if (!Page.IsPostBack)
{ //do something }

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

Jeff Pang
sumber
7
aha! Terima kasih banyak, itulah trik dalam kasus saya! Saya memuat ulang dropdownlist di pageload, dan kerangka kerja kehilangan kendali atas item (yang baru) di ddl, dan yang saya klik (yang tidak ada lagi)
Michel
Saya memiliki kesalahan yang sama dengan OP ... Saya menggunakan wizard di formulir saya dan saya memanggil langkah 0 di memuat halaman saya. dihapus itu dan masalah menghilang. Terima kasih ...
mulai
Terima kasih banyak untuk jawaban ini .... Punya masalah yang sama dan ternyata saya baru saja lupa mengabaikan postback ketika memuat data ke dalam kisi saya ... hemat saya banyak waktu
Quagmire
10
Duh! Kembali ke formulir web dari MVC adalah hal yang menyebalkan. Ini adalah jawaban yang benar
Vishnoo Rath
2
Saya melakukan ini, tetapi itu tidak berhasil bagi saya karena ada kode yang harus saya jalankan di event page_load ketika itu bukan postback, dan jadi saya masih mendapatkan kesalahan yang sama. Menonaktifkan kondisi tampilan untuk pengulang saya menyelesaikan masalah sebagai gantinya.
Bryan
40

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:

"Argumen postback atau callback tidak valid. Validasi acara diaktifkan menggunakan konfigurasi atau <% @ Page EnableEventValidation =" true "%> di halaman. Untuk tujuan keamanan, fitur ini memverifikasi bahwa argumen untuk postback atau peristiwa callback berasal dari kontrol server yang awalnya memberikannya. Jika data tersebut valid dan diharapkan, gunakan metode ClientScriptManager.RegisterForEventValidation untuk mendaftarkan data postback atau callback untuk validasi. "

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.RegisterForEventValidationmetode Render. Tapi itu tidak berhasil.

protected override void Render(HtmlTextWriter writer)
{
    foreach (DataGridItem item in this.Grid.Items)
    {
        Page.ClientScript.RegisterForEventValidation(item.UniqueID);
        foreach (TableCell cell in (item as TableRow).Cells)
        {
            Page.ClientScript.RegisterForEventValidation(cell.UniqueID);
            foreach (System.Web.UI.Control control in cell.Controls)
            {
                if (control is Button)
                    Page.ClientScript.RegisterForEventValidation(control.UniqueID);
            }
        }
    }
}

3) Saya mengubah jenis tombol di kolom kisi dari PushButtonmenjadi LinkButton. Berhasil! ("ButtonType =" LinkButton "). Saya pikir jika Anda dapat mengubah tombol Anda ke kontrol lain seperti" LinkButton "dalam kasus lain, itu akan berfungsi dengan baik.

Amir Chatrbahr
sumber
1
Solusi saya adalah menyerah pada tombol bersarang di dalam datagrid. MS gagal lagi.
Jacobs Data Solutions
Solusi Anda juga berhasil untuk saya. Terima kasih. Tapi saya ingin tahu mengapa Buttontidak bekerja ketika linkButtonbekerja di program yang sama. Jika demikian, apakah kita harus selalu menggunakannya linkButton? Bagaimana kita bisa membuat lebih fleksibel?
Frank Myat Thu
8
Coba tambahkan ke tombol Anda UseSubmitBehavior = "False" stackoverflow.com/questions/2968525/…
JJschk
Awesomeeeeeee :) .. Anda dapat belajar ini hanya dengan pengalaman .. Anda terbukti benar scenerio tat menunjukkan Pengalaman adalah guru terbaik .. ans bagus dan penjelasan!
saun4frsh
Di ganti untuk Render ANDA HARUS PUT basis. Memberikan (penulis); pada akhirnya ... kalau tidak, itu tidak akan berhasil!
Paul Zahra
28

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.

Andy C.
sumber
3
c, Anda tidak perlu menyimpan item yang dipilih dalam bidang tersembunyi, jika Anda membuat kotak pilih runat = "server" Anda dapat membaca nilai yang diposting kembali dari Request.Form [ selectid .UnqiueID]. Dan jika banyak yang dipilih, browser akan memposting nilainya sebagai csv. Perhatikan item dan properti indeks yang dipilih dari kontrol akan salah pada server karena Anda telah memodifikasi daftar itu pada klien yang server tidak tahu.
Michael
Michael, itu berhasil. selama Anda menambahkan "multiple = true" jika tidak, itu hanya akan memberi Anda 1 nilai. Terima kasih
Sameer Alibhai
1
Punya masalah yang sama untuk dropdownlist dengan karakter baris baru. Mengubah ke pilihan berhasil dengan sempurna. Terima kasih!
thchaver
Saya menggunakan tua biasa <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.?
Pranesh Janarthanan
17

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.

Umar Farooq Khawaja
sumber
3
Saya punya masalah ini dengan kontrol web lama. Platform web / CMS (sitecore) kami mendapat pembaruan besar yang mengaktifkan validasi acara (sebelumnya tidak aktif! Aduh!). Kontrol pengulang menampilkan gambar di galeri web (dengan tombol untuk mengatur ulang) dan pada postback tombol ini pengecualian akan terjadi. Saya menonaktifkan kondisi tampilan pada repeater menggunakan EnableViewState = "false" seperti yang Anda sarankan dan hei presto itu berhasil. Seperti yang orang lain temukan, Overriding Render () dan menggunakan ClientScriptManager.RegisterForEventValidation () tidak berfungsi untuk saya. TERIMA KASIH!
xan
Seperti @xan saya juga menggunakan Sitecore dan inilah yang saya butuhkan.
wilsjd
Ini juga bekerja untuk saya. Panel AJAX Update akan bekerja dengan baik, tapi itu membengkak di atas kepala yang tidak saya butuhkan dalam kasus ini, jadi terima kasih Umar Farooq Khawaja.
Bryan
17

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.

<body>
<form id="form1" runat="server">
<div>
        <form action="#" method="post" class="form" role="form">
        <div>
        ...
        <asp:Button ID="submitButton" runat="server"
        </div>
</div>
</body>

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.

biggles
sumber
12

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:

protected override void Render(HtmlTextWriter writer)
{
    foreach (string val in allPossibleListBoxValues)
    {
        Page.ClientScript.RegisterForEventValidation(myListBox.UniqueID, val);
    }
    base.Render(writer);
}

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:

protected override void Render(HtmlTextWriter writer)
{
    foreach (ListItem i in listBoxAll.Items)
    {
        Page.ClientScript.RegisterForEventValidation(listBoxSelected.UniqueID, i.Value);
    }
    base.Render(writer);
}
Josh
sumber
9

Satu cara lain yang tidak disebutkan di sini adalah dengan subclass ListBox

Yaitu.

public class ListBoxNoEventValidation : ListBox 
{
}

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).

Mike C.
sumber
2
Dijelaskan dengan baik di sini .
Pavel Hodek
1
Saya pikir cara terbaik untuk mengatasi ini adalah dengan melakukan ini. Kita harus memperbaikinya pada level kontrol dan bukan pada level halaman dan mempertaruhkan keamanan semua kontrol yang terlibat +1 dan terima kasih atas @PavelHodek untuk tautan itu.
James Poulose
Sayangnya, tampaknya jika Anda melakukan ini, setiap item daftar yang ditambahkan pada klien tidak akan dikenali jika mereka adalah item yang dipilih ketika halaman diposting kembali.
Jonathan Wood
9

Anda mencoba sesuatu seperti itu, di halaman .aspx Anda

Menambahkan

EnableEventValidation = "false"

Anda merasa bebas untuk bertanya!

pengguna3690871
sumber
Saya berpendapat jika menonaktifkan tawaran validasi bawaan oleh kerangka kerja untuk berhenti melihat kesalahan akan menjadi solusi yang paling tepat dalam kasus ini.
Jviaches
8

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;"

MyEname
sumber
+1 Mudah diterapkan. Mungkin bukan yang terbersih, tetapi cukup mudah.
nutsch
7

3: Saya mengubah jenis tombol saya di kolom kotak dari "Tombol Tekan" ke "Tombol Tombol". Berhasil! ("ButtonType =" LinkButton ") Saya pikir jika Anda dapat mengubah tombol Anda ke kontrol lain seperti" LinkButton "dalam kasus lain, itu akan berfungsi dengan baik.

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.

brian welch
sumber
Inti dari masalah ini adalah model eventvalidation asp.net dan apakah "halaman" dimodifikasi oleh klien pada saat Anda melakukan posting kembali. Apa maksudmu '..... Dan kontrol bergeser ini membuat .net tidak nyaman' ??
Julius A
7

(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:

protected override void OnInit(EventArgs e) {
  foreach (GridViewRow grdRw in gvEvent.Rows) {

  Button deleteButton = (Button)grdRw.Cells[2].Controls[1];

  deleteButton.ID = "btnDelete_" + grdRw.RowIndex.ToString();           
  }
}

Artikel asli:

http://www.c-sharpcorner.com/Forums/Thread/35301/

yilee
sumber
6

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:

<asp:TemplateField ItemStyle-Width="9">
  <ItemTemplate>
 <asp:ImageButton ID="ImgBtn" ImageUrl="Include/images/gridplus.gif" CommandName="Expand"
                        runat="server" />
  </ItemTemplate>
</asp:TemplateField>

Saya telah mengganti seperti ini.

<asp:TemplateField>
<ItemTemplate>
     <asp:LinkButton  CommandName="Expand" ID="lnkBtn"  runat="server" ><asp:Image  ID="Img"  runat="server" ImageUrl="~/Images/app/plus.gif" /></asp:LinkButton>
      </ItemTemplate>
</asp:TemplateField> 
Swathi
sumber
5

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:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string[] opcoes = HF.value.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

"HF" (hiddenfield) saya memiliki opsi yang dipisahkan oleh baris baru, seperti ini:

HF.value = "option 1\n\roption 2\n\roption 3";

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:

DropDownList DD = (DropDownList)F.FindControl("DDlista");
HiddenField HF = (HiddenField)F.FindControl("HFlista");
string dados = HF.Value.Replace("\r", "");
string[] opcoes = dados.Split('\n');
foreach (string opcao in opcoes) DD.Items.Add(opcao);

Semoga ini bisa membantu seseorang.

pamelo
sumber
4

jika Anda mengubah UseSubmitBehavior="True" ke UseSubmitBehavior="False"masalah Anda akan terpecahkan

<asp:Button ID="BtnDis" runat="server" CommandName="BtnDis" CommandArgument='<%#Eval("Id")%>' Text="Discription" CausesValidation="True" UseSubmitBehavior="False" />
ali joodie
sumber
Itu tidak berhasil untuk saya. Saya menggunakan imagebutton, dan dalam sebuah tabel dalam repeater, jadi situasinya tidak persis sama. Menonaktifkan tampilan pengulang bekerja untuk saya.
Bryan
3

Saya memiliki masalah yang sama, apa yang saya lakukan:

Baru saja menambahkan kondisi if(!IsPostBack)dan berfungsi dengan baik :)

Niket
sumber
3

Kesalahan ini akan ditampilkan tanpa pos balik

Tambahkan kode:

If(!IsPostBack){

 //do something

}
Balaji Selvarajan
sumber
2

Dalam hal ini, tambahkan id ke tombol di RowDataBound dari kisi. Itu akan menyelesaikan masalah Anda.

nilesh
sumber
2

Solusi sederhana untuk masalah ini adalah dengan menggunakan pemeriksaan IsPostBack pada pemuatan halaman Anda. Itu akan menyelesaikan masalah ini.

user249527
sumber
2

Ajax UpdatePanel membuatnya, dan saya pikir itu cara termudah , mengabaikan overhead postback Ajax .

netseng
sumber
2

Saya tahu bahwa ini adalah pos yang sangat lama. Dengan asumsi bahwa Anda memanggil aplikasi Anda, berikut adalah ide yang berhasil bagi saya:

  1. Terapkan ICallbackEventHandler di halaman Anda
  2. Panggil ClientScriptManager.GetCallbackEventReference untuk memanggil kode sisi server Anda
  3. Saat pesan kesalahan menyatakan, Anda kemudian dapat memanggil ClientScriptManager.RegisterForEventValidation

Jika Anda tidak memerlukan kontrol total, Anda dapat menggunakan panel pembaruan yang akan melakukan ini untuk Anda.

tmck2
sumber
2

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.

Tushar
sumber
Terima kasih, ternyata saya memiliki <form>bidang tambahan dalam kode saya juga.
Eric Kigathi
2

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.

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
        bindGridview();
        }
Akhil Singh
sumber
1

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!

cem
sumber
1

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!!!

Razia
sumber
1

Apa yang berhasil bagi saya adalah memindahkan kode berikut dari page_load ke page_prerender:

lstMain.DataBind();
Image img = (Image)lstMain.Items[0].FindControl("imgMain");

// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    cs.RegisterStartupScript(cstype, csname1, "<script language=javascript> p=\"" + img.ClientID + "\"</script>");
}
Murad Dodhiya
sumber
1

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

Programista
sumber
Mengubah dari kontrol asp ke reguler <select id = "director" runat = "server"> bekerja dengan sangat baik. Saya dapat mengakses nilainya dalam kode di belakang menggunakan: ex .: string directorId = Request.Form [director.ID]
Baxter
1

Jika Anda menggunakan panel pembaruan Ajax. Tambahkan <Triggers>tag dan di dalamnya memicu Tombol atau kontrol yang menyebabkan postBack menggunakan<asp:PostBackTrigger .../>

devo882
sumber
1

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:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

    Dim ClientScript As ClientScriptManager = Page.ClientScript

    ClientScript.RegisterForEventValidation("ddCar", "Mercedes")

    MyBase.Render(writer)
End Sub

atau sedikit variasi dalam C # bisa menjadi:

protected override void Render(HtmlTextWriter writer)
{
    Page.ClientScript.RegisterForEventValidation("ddCar", "Mercedes");
    base.Render(writer);
}

Untuk pemula: Ini harus masuk dalam kode di belakang file (.vb atau .cs) atau jika digunakan dalam file aspx Anda dapat membungkus <script>tag.

CraigS
sumber
1

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 !!!

pengguna2520440
sumber