PRB: ASP.NET kebakaran perubahan acara bahkan jika Anda tidak mengubah nilai kontrol

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 314809 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

GEJALA

Dalam keadaan tertentu, ASP.NET kebakaran perubahan acara untuk ASP.NET Web mengendalikan bahkan jika Anda tidak mengubah kontrol.

PENYEBAB

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.

PEMECAHAN MASALAH

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.

STATUS

Ini adalah aktivitas.

INFORMASI LEBIH LANJUT

Langkah-Langkah untuk Mereproduksi Perilaku

Membuat formulir Web

  1. Buat baru Visual Basic ASP.NET aplikasi bernama ChangeFired.
  2. Buka WebForm1 dalam mode desainer. Tarik DataList kontrol, Tombol kontrol, dan DataSet kontrol ke bentuk.
  3. Dalam Tambahkan DataSet kotak dialog, klik Untyped dataset, lalu klik Oke. Menjaga nama default untuk semua kontrol.
  4. Mengedit koleksi tabel untuk DataSet1. Menambahkan sebuah tabel baru bernama Table1.
  5. Mengedit koleksi kolom untuk Table1. Menambahkan kolom baru bernama Column1.
  6. Klik DataList1, dan kemudian mengubah DataSource properti untuk DataSet1.
  7. Klik kanan DataList1, arahkan ke Mengedit Template, lalu klik Item template. Tarik DropDownList kontrol untuk ItemTemplate bagian.
  8. 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.
  9. Menetapkan AutoPostBack properti untuk benar untuk DropDownList1.
  10. Edit DataBindings koleksi untuk DropDownList1. Tambahkan Setelah mengikat kustom ekspresi untuk SelectedIndex Properti:
    DataBinder.Eval(Container, "DataItem.Column1")
    					
  11. Beralih ke tampilan HTML. Menetapkan jejak atribut benar dalam @ Page petunjuk sebagai berikut:
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" 
    Inherits="ChangeFired.WebForm1" trace="true" %>
    					

Menambahkan kode-File di belakang

  1. Klik kanan WebForm1.aspx, dan kemudian klik Lihat kode.
  2. 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
    					
  3. 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Meninjau informasi jejak untuk pohon kontrol. Pemberitahuan yang DropDownList kontrol tidak memiliki pandangan negara.
  6. 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.

Properti

ID Artikel: 314809 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Kata kunci: 
kbdatabinding kbevent kbprb kbservercontrols kbstate kbwebforms kbmt KB314809 KbMtid
Penerjemahan Mesin
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

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com