2009-11-30 16 views
8

क्या नियंत्रण पदानुक्रम को बुलबुला करने से आइटम कॉमांड या नियंत्रण ईवेंट को रोकना संभव है? मेरे पास एक ऐसा नियंत्रण है जिसमें बाल उपयोगकर्ता नियंत्रण शामिल हैं जो पहले से ही कोड हो सकता है जो उनके आइटम कमांड ईवेंट को संभालता है। मैं क्या करना चाहता हूं कि बच्चे के नियंत्रण को आइटमकॉमैंड को पैरेंट कंट्रोल के साथ पास करने का फैसला करने की अनुमति देना है, यदि वह पहले से ही कोड को उसके कोड में संसाधित करता है।मैं ASP.net में ईवेंट बबलिंग कैसे रद्द करूं?

धन्यवाद,

माइक

उत्तर

11

अपने उपयोगकर्ता नियंत्रण कक्षा में, OnBubbleEvent() को ओवरराइड करें। यदि आप सच लौटते हैं, तो आप पैरेंट नियंत्रण में "बबल अप" को रोक देंगे।

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

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

एक और कुछ हद तक साफ बात यह है कि मैंने पाया है, जबकि इस पर संवारता, कुछ मामलों में उपयोगी हो सकता है जो ... आप कमांड नाम है कि रूप में अच्छी तरह नियंत्रण heirachy में 'ऊपर बुलबुले' को बदल सकते हैं के बारे में सोचना। अपने बच्चे के उपयोगकर्ता नियंत्रण में, ऑनक्लिक के बजाय ऑनकॉमैंड का उपयोग करें।

तो, आप अपने उपयोगकर्ता नियंत्रण में एक बटन है का कहना है कि इस से कोड बदलने के लिए,:

<asp:button id="mySpecialButton" 
      onClick="mySpecialButton_OnClick" runat="server"> 
इस के लिए

:,

<asp:Button id="mySpecialButton" 
      CommandName="mySpecialCommand" 
      CommandArgument="myArgument" 
      OnCommand="mySpecialButton_Command" 
      runat="server"/> 
तो codebehind में

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

इस प्रकार, आपके मूल नियंत्रण के आइटम कमांडर हैंडलर में आपको मूल कमांड के बजाए यह नया कमांड नाम मिलेगा ई बच्चे नियंत्रण से, जिसे आप फिट देखते हुए कर सकते हैं।

0

सेट e.Handled = सच (ङ अपने इस कार्यक्रम का नाम है)।

+0

जेम्स, मुझे आपके द्वारा उल्लिखित हैंडल संपत्ति नहीं मिल रही है। वर्तमान में मैं इसे उपयोगकर्ता नियंत्रण के बटन क्लिक ईवेंट के अंदर करने की कोशिश कर रहा हूं। संरक्षित उप btnAddToCart_Click (ByVal इस वस्तु के रूप में, ByVal ई System.EventArgs के रूप में) हैंडल btnAddToCart.Click इस मामले में ई बस EventArgs है और यह एक संभाला संपत्ति नहीं है: विधि निम्नलिखित हस्ताक्षर हैं। क्या कहीं और मुझे इस संपत्ति तक पहुंचने की कोशिश करनी चाहिए? – mclark1129

1

क्लिक घटना तकनीकी रूप से बुलबुला नहीं है। वह ईवेंट आपके कोड द्वारा उठाया और संभाला जाता है लेकिन सूची नियंत्रण क्लिक ईवेंट भी देख रहा है और एक आइटम कमांड ईवेंट बढ़ा रहा है। इसे रोकने के लिए कोई रास्ता नहीं है क्योंकि आप यह भी गारंटी नहीं दे सकते कि कौन सा ईवेंट हैंडलर पहले कॉल किया जाएगा।

क्या आपके पास उस बटन से जुड़े कमांडनाम है जिसे आप उस ईवेंट को उठाना नहीं चाहते हैं? आपको शायद अपने बटन_Click ईवेंट से पूरी तरह से छुटकारा पाना चाहिए और ItemCommand ईवेंट में अपना कमांड हैंडलिंग करना चाहिए, कमांडनाम के लिए ईवेंट तर्क की जांच करना और उचित प्रतिक्रिया देना चाहिए।

दूसरे शब्दों में, एक कमांडनाम का उपयोग करें जो यह पहचानता है कि आप क्या करना चाहते हैं, फिर आइटम कमांड ईवेंट में, केवल एक कमांडनाम देखें जब आप हैंडलिंग के लिए जिम्मेदार हैं।

+0

किसी क्लिक ईवेंट के प्रश्न में कोई आइटम नहीं है, लेकिन एक आइटम कमांड का कोई उल्लेख नहीं है। कौन सा * बुलबुला करता है। मॉर्गन का जवाब दिखाता है कि इसे कैसे संभालें। – Ruben

+0

इसका उल्लेख जेम्सएल के जवाब के अनुवर्ती में किया गया था। हां मॉर्गन का जवाब बेहतर है इसलिए इसे क्यों चुना जाता है। StackOverflow डिज़ाइन के रूप में काम कर रहा है। – Josh

संबंधित मुद्दे