SORUN: denetimin değerini değiştirmek, ASP.NET'in değişikliği olaylarını harekete

Makale çevirileri Makale çevirileri
Makale numarası: 314809 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Belirli koşullarda ASP.NET'in değişikliği harekete bir ASP.NET Web olayı denetlemek için Denetim değiştirseniz bile.

Neden

DropDownList denetimde Selectedındexchanged olay veya bir TextBox denetimine TextChanged olayı gibi bazı denetimleri üzerinde görünüm durumunu kullanacak biçimde Change olayı kaydını kullanır. Olay sayfaya sonra bu denetimler dinamik olarak oluşturduğunuzda, bu sorunla karşılaşırsınız.

ASP.NET sayfayı tarayıcıya işler, dinamik olarak oluşturulan denetimler bir ilişkili Change olayı yok. ASP.NET, hiçbir olay bulunduğundan, görünüm durumu kaydetmez. Bu görünüm durumu iyileştirme olarak adlandırılır.

Sayfayı yeniden deftere nakledildiğinde ve olayları bilinmektedir, ASP.NET görünüm durumu bekler, ancak hiçbiri olduğunu bulur. Denetimin değişmemiş olsa bile bu fark, Change olayı harekete.

Çözüm

Önce ASP.NET sayfayı işler, dinamik olarak oluşturulan denetimin Change olayı oluşturan kanca olduğunu emin olun. Bu denetim için görünüm durumu olduğunu sağlar.

Durum

Bu davranış tasarım yüzündendir.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

Web formu oluşturma

  1. ChangeFired adlı yeni bir Visual Basic ASP.NET uygulaması oluşturun.
  2. WebForm1, Tasarımcı modunda açın. Bir DataList denetimi, bir Düğme denetimi ve bir DataSet denetimi forma sürükleyin.
  3. DataSet Ekle iletişim kutusundaki Untyped dataset ' ı tıklatın ve sonra Tamam ' ı tıklatın. Tüm denetimler için varsayılan adlar tutun.
  4. Tables derlemesi DataSet1 için düzenleyin. Table1 adlı yeni bir tablo ekleyin.
  5. Columns derlemesine Table1 için düzenleyin. Sütun1'adlı yeni bir sütun ekleyin.
  6. DataList1 ' ı tıklatın ve sonra da DataSet1 için DataSource özelliğini değiştirin.
  7. DataList1 sağ tıklatın, Düzenle üzerine gelin ve Madde şablonları</a1>'ı tıklatın. DropDownList denetim ıtemtemplate bölüme sürükleyin.
  8. DropDownList1 ' ı tıklatın ve sonra bu beş madde öğeler koleksiyonuna ekleyin. Bir, iki, üç, dört ve beş sırasıyla metin ve bu öğeleri <a1>değer</a1> özelliklerini ayarlayın.
  9. AutoPostBack özelliğini DropDownList1 için true olarak ayarlayın.
  10. DataBindings topluluğuna DropDownList1 için düzenleyin. Selectedındex özelliği için özel bağlama aşağıdaki deyimi ekleyin:
    DataBinder.Eval(Container, "DataItem.Column1")
    					
  11. HTML görünümüne geçin. Izleme özniteliği true@ Page yönergesinde aşağıdaki gibi ayarlayın:
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" 
    Inherits="ChangeFired.WebForm1" trace="true" %>
    					

Arka planda kodlama dosya ekleme

  1. WebForm1.aspx dosyasını sağ tıklatın ve Kod Görüntüle</a1>'ı tıklatın.
  2. Aşağıdaki kodu Page_Load</a1> olayına ekleyin:
    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. Aşağıdaki gibi Selectedındexchanged olay işlenecek Page_Load olayı yeni bir alt yordam oluşturun:
    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
    					

Örnek çalıştırın.

  1. Sayfayı çalıştırın. Görünüm durumu izleme bilgileri için Denetim ağacına dinamik olarak oluşturulan DropDownList denetimleri içermesi dikkat edin.

    Bu, DataBind yöntemine ça?r? dinamik olarak DropDownList denetimleri oluşturur ve DataBind call sonra Page_Load olayı olay işleyicisi kanca nedeniyle oluşur. Denetimleri, bir olay işleyicisi, görünüm durumu olduğundan iyileştirme gerçekleşmez.
  2. Sayfadaki düğmesini tıklatın. Tekrar deftere naklet oluşur ve yalnızca Page_Load olayı içinde kod çalışan dikkat edin. Bir olay işleyicisi, denetimle ilişkili olduğu için görünüm durumu DropDownList denetimlerinde bulunmaktadır.
  3. DropDownList denetimlerinin değeri değiştirin. Tekrar deftere naklet oluştuğunu dikkat edin. Buna ek olarak, ASP.NET Page_Load olayı ve DropDownList1_SelectedIndexChanged olay çalışır dikkat edin.
  4. DropDownList1_SelectedIndexChanged olayda, yeni DropDownList denetimlere yeniden oluşturmaya DataBind yöntemini çağırın.

    Selectedındexchanged olay bu yeni DropDownList denetimlere sayfaya değil, ASP.NET'in görünüm durumu iyileştirme kullanır ve yeni DropDownList denetimler için Görünüm durumunu kaydetmek.
  5. Denetim ağacına izleme bilgilerini gözden geçirin. Görünüm durumunun DropDownList denetimleri olmayan dikkat edin.
  6. Sayfadaki düğmesini tıklatın. Deftere nakil geri oluştuğunu dikkat edin ve ASP.NET Page_Load olayı çalıştığını dikkat edin. DropDownList denetimlere Selectedındexchanged olay kanca nedeniyle ASP.NET denetimleri ile ilişkilendirilmiş görünüm durumu umuyor.

    Ancak görünüm durumu olmadığından, ASP.NET Selectedındexchanged olayı harekete karşın, bir madde seçin.

ÇÖZÜM

Bu sorunu gidermek için <a0></a0>, böylece yeni oluşturulan denetimleriyle olay işleyicilerini takma DropDownList1_SelectedIndexChanged olay kodu uncomment.

Özellikler

Makale numarası: 314809 - Last Review: 3 Mayıs 2004 Pazartesi - Gözden geçirme: 2.7
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
Anahtar Kelimeler: 
kbmt kbdatabinding kbevent kbprb kbservercontrols kbstate kbwebforms KB314809 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:314809

Geri Bildirim Ver

 

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