Beberapa kontrol, seperti SelectedIndexChanged acara di DropDownList kontrol atau TextChanged acara di TextBox kontrol, bergantung pada pendaftaran perubahan acara untuk menggunakan tampilan
negara. Anda mengalami masalah ini ketika Anda membuat kontrol tersebut secara dinamis
setelah acara hooked up.
Ketika ASP.NET merender halaman untuk
browser, kontrol yang dibuat secara dinamis tidak memiliki terkait
Perubahan acara. Karena tidak ada peristiwa hadir, ASP.NET tidak menyimpan pandangan
negara. Ini disebut lihat negara optimasi.
Ketika halaman adalah
dikirim kembali, dan ketika peristiwa yang telah hooked up, ASP.NET mengharapkan lihat negara tapi
menemukan bahwa tidak ada. Perbedaan ini kebakaran perubahan acara bahkan jika
kontrol tidak berubah.
Pastikan bahwa Anda menghubungkan perubahan acara untuk secara dinamis
dibuat kontrol sebelum ASP.NET merender halaman. Hal ini memastikan bahwa pandangan negara
untuk kontrol ada.
Buat baru Visual Basic ASP.NET aplikasi bernama
ChangeFired.
Buka WebForm1 dalam mode desainer. Tarik DataList kontrol, Tombol kontrol, dan DataSet kontrol ke bentuk.
Dalam Tambahkan DataSet kotak dialog, klik Untyped dataset, lalu klik Oke. Menjaga nama default untuk semua kontrol.
Mengedit koleksi tabel untuk DataSet1. Menambahkan sebuah tabel baru
bernama Table1.
Mengedit koleksi kolom untuk Table1. Menambahkan kolom baru
bernama Column1.
Klik DataList1, dan kemudian mengubah DataSource properti untuk DataSet1.
Klik kanan DataList1, arahkan ke Mengedit Template, lalu klik Item template. Tarik DropDownList kontrol untuk ItemTemplate bagian.
Klik DropDownList1, dan kemudian menambahkan lima item untuk koleksi item. Menetapkan Teks dan Nilai properti item untuk salah satu,dua, tiga,empat, dan limamasing-masing.
Menetapkan AutoPostBack properti untuk benar untuk DropDownList1.
Edit DataBindings koleksi untuk DropDownList1. Tambahkan
Setelah mengikat kustom ekspresi untuk SelectedIndex Properti:
DataBinder.Eval(Container, "DataItem.Column1")
Beralih ke tampilan HTML. Menetapkan jejak atribut benar dalam @ Page petunjuk sebagai berikut:
Klik kanan WebForm1.aspx, dan kemudian klik Lihat kode.
Tambahkan kode berikut untuk Page_Load acara:
DataSet1.Tables(0).Rows.Add(New Object() {"1"})
DataSet1.Tables(0).Rows.Add(New Object() {"2"})
DataSet1.Tables(0).Rows.Add(New Object() {"3"})
DataSet1.Tables(0).Rows.Add(New Object() {"4"})
If Not IsPostBack Then
DataBind()
End If
Dim objItem As DataListItem
For Each objItem In DataList1.Items
AddHandler CType(objItem.FindControl("DropDownList1"), _
DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged
If Not objItem.FindControl("DropDownList1") Is Nothing Then
Trace.Write("Added SelectedIndexChanged Handler")
End If
Next
Buat baru Sub prosedur di bawah ini Page_Load Event untuk menangani SelectedIndexChanged peristiwa sebagai berikut:
Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
DataBind()
Trace.Write("SelectedIndexChanged, DataBind()")
'Uncomment the following code to resolve this problem.
'Dim objItem As DataListItem
'For Each objItem In DataList1.Items
' AddHandler CType(objItem.FindControl("DropDownList1"), _
' DropDownList).SelectedIndexChanged, AddressOf DropDownList1_SelectedIndexChanged
'Next
End Sub
Menjalankan sampel
Menjalankan halaman. Melihat yang dibuat secara dinamis DropDownList kontrol berisi pandangan negara jejak informasi untuk
Kontrol pohon.
Hal ini terjadi karena panggilan untuk DataBind metode secara dinamis menciptakan DropDownList kontrol, dan Anda menghubungkan event handler setelah DataBind panggilan Page_Load acara. Karena kontrol memiliki sebuah event handler, lihat negara
Optimasi tidak terjadi.
Klik tombol pada halaman. Perhatikan bahwa posting kembali
terjadi, dan hanya kode di dalam Page_Load acara berjalan. Lihat negara ada untuk DropDownList kontrol karena sebuah event handler yang berhubungan dengan
kontrol.
Mengubah nilai dalam salah satu DropDownList kontrol. Perhatikan bahwa posting kembali terjadi. Selain itu, perhatikan
ASP ini.NET kebakaran Page_Load acara dan berjalan DropDownList1_SelectedIndexChanged acara.
Dalam DropDownList1_SelectedIndexChanged acara, panggilan DataBind metode untuk membuat baru DropDownList kontrol.
Karena SelectedIndexChanged acara yang tidak tersambung ke ini baru DropDownList kontrol, ASP.NET menggunakan tampilan negara optimasi dan tidak menyimpan
Lihat negara untuk baru DropDownList kontrol.
Meninjau informasi jejak untuk pohon kontrol. Pemberitahuan
yang DropDownList kontrol tidak memiliki pandangan negara.
Klik tombol pada halaman. Perhatikan bahwa posting kembali
terjadi, dan menyadari bahwa ASP.NET berjalan Page_Load acara. Karena Anda hook SelectedIndexChanged peristiwa DropDownList kontrol, ASP.NET mengharapkan lihat negara akan dikaitkan dengan
kontrol.
Namun, karena pandangan negara tidak ada, ASP.NET kebakaran
The SelectedIndexChanged acara, meskipun Anda tidak memilih item.
Penyelesaian
Untuk mengatasi masalah ini, kode dalam tanda komentar DropDownList1_SelectedIndexChanged acara sehingga event handlers menghubungkan dengan yang baru dibuat
kontrol.
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:314809
Terima kasih! Masukan Anda akan digunakan untuk membantu kami meningkatkan konten dukungan. Untuk opsi bantuan lainnya, kunjungi Halaman Beranda Bantuan dan Dukungan.