2009-11-30 17 views
8

Bir ItemCommand veya denetim olayını denetim hiyerarşisini kabarcıklandırmadan durdurmak mümkün mü? ItemCommand olaylarını işleyen bir kod içeren veya içermeyen çocuk kullanıcı denetimlerini içeren bir denetimim var. Benim yapmak istediğim şey, çocuğunuzun kontrolünü, etkinliğin kendi kod arkasına işlediği durumda, ana kontrol ile birlikte ItemCommand'ı geçmemeye karar vermesidir.ASP.net'de olay köpürmeyi nasıl iptal edebilirim?

sayesinde

Mike

cevap

11

Kullanıcı denetim sınıfınızda OnBubbleEvent() öğesini geçersiz kılın. Doğru döndürürseniz, ana denetimlere "kabarcıkla" son vereceksiniz.

protected override bool OnBubbleEvent(object source, EventArgs args) 
    { 
     //handled 
     return true; 

     //uncomment line below to bubble up (unhandled) 
     //return base.OnBubbleEvent(source, args); 
    } 

bazı durumlarda yararlı olabilecek, bu konuda müdahalesi ... siz de kontrol heirachy içinde 'yukarı kabarcıklar' o komut adını değiştirebilir ederken buldum düşünmek başka biraz düzgün bir şey. Çocuğunuzun kullanıcı denetiminde Onclick yerine OnCommand kullanın. Buna

<asp:button id="mySpecialButton" 
      onClick="mySpecialButton_OnClick" runat="server"> 

:

Yani, bu kodu değiştirmek, kullanıcı denetiminde bir düğme var demek, codebehind sonra

<asp:Button id="mySpecialButton" 
      CommandName="mySpecialCommand" 
      CommandArgument="myArgument" 
      OnCommand="mySpecialButton_Command" 
      runat="server"/> 

protected void mySpecialButton_Command(object sender, CommandEventArgs e) 
     { 
      RaiseBubbleEvent(this, new CommandEventArgs("Handled", e)); 
     } 

Böylece, ebeveyn denetiminizin ItemCommand işleyicisinde, özgün komut adından ziyade bu yeni komut adını alacaksınız. uygun gördüğünüzle yapabileceğiniz çocuk kontrolünden e.

0

Seti e.Handled = true (e etkinliğinizin adı ise).

+0

James, Bahsettiğiniz Handled özelliğini bulamıyorum. Şu anda bunu bir kullanıcı kontrol düğmesinin tıklama olayında yapmaya çalışıyorum. Yöntem şu imzası vardır: Korumalı Alt btnAddToCart_Click (ByVal gönderen As Nesnesi, ByVal e As System.EventArgs) btnAddToCart.Click e bu durumda yalnızca EventArgs olduğunu ve bir handled özelliği yok. Bu mülke erişmeye çalışmam gereken başka bir yer var mı? – mclark1129

1

Click olayı teknik olarak kabarcıklanma değil. Bu olay kodunuz tarafından kaldırılır ve işlenir; ancak liste denetimi ayrıca Tıklama etkinliğini izler ve bir ItemCommand olayı yükseltir. Bunu engellemenin hiçbir yolu yoktur, çünkü hangi olay işleyicisinin ilk olarak çağrılacağını bile garanti edemezsiniz.

Bu olayı yükseltmek istemediğiniz düğmeyle ilişkilendirilmiş bir CommandName'iniz var mı? Muhtemelen Button_Click olayınızdan tamamen kurtulmalı ve CommandCom için olay hatalarını kontrol ederek ve uygun şekilde tepki vererek, ItemCommand olayında komut işleminizi gerçekleştirmelisiniz. Başka bir deyişle, ne yapmak istediğinizi tanımlayan bir KomutDosyası kullanın, daha sonra ItemCommand olayında, yalnızca işlemden sorumlu olduğunuz bir CommandName gördüğünüzde harekete geçin.

+0

Bir Click olayı sorusu söz konusu değil, bir ItemCommand söz konusu. Hangi * kabarcık *. Morgan'ın cevabı bunun nasıl ele alınacağını gösteriyor. – Ruben

+0

JamesL'nin cevabına kadar bir takipten bahsedilmiştir. Evet Morgan'ın cevabı daha iyi olduğu için neden oylanıyor? StackOverflow tasarlandığı gibi çalışıyor. – Josh

İlgili konular