Wie kann ich Ereignisblasen in ASP.net abbrechen?

8

Ist es möglich, einen ItemCommand oder ein Control Event zu stoppen, um die Kontrollhierarchie zu sprudeln? Ich habe ein Steuerelement, das untergeordnete Benutzersteuerelemente enthält, die möglicherweise bereits über Code verfügen, der ihre ItemCommand-Ereignisse behandelt. Was ich tun möchte, ist, dass die untergeordnete Steuerung entscheiden kann, den ItemCommand nicht an das übergeordnete Steuerelement zu übergeben, falls das Ereignis bereits in seinem Code-Behind verarbeitet wird.

Danke,

Mike

    
mclark1129 30.11.2009, 21:11
quelle

3 Antworten

11

Überschreiben Sie in Ihrer Benutzersteuerungsklasse OnBubbleEvent (). Wenn Sie true zurückgeben, werden Sie den "bubble up" zu den übergeordneten Steuerelementen stoppen.

%Vor%

Eine weitere nette Sache, über die ich nachdenken konnte, während ich daran herumgebastelt habe, was in einigen Fällen nützlich sein könnte ... Sie können den Befehlsnamen ändern, der in der Kontroll-Heirachy ebenfalls "aufgeht". Verwenden Sie in Ihrem untergeordneten Benutzersteuerelement OnCommand statt Onclick.

Sagen Sie also, Sie haben eine Schaltfläche in Ihrem Benutzersteuerelement, ändern Sie den Code von diesem:

%Vor%

dazu:

%Vor%

dann im Codebehind,

%Vor%

Damit erhalten Sie im ItemCommand-Handler Ihrer übergeordneten Kontrolle diesen neuen Befehlsnamen anstelle des ursprünglichen Befehlsnamens aus dem untergeordneten Steuerelement, mit dem Sie nach Belieben arbeiten können.

    
Morgan 03.12.2009, 23:43
quelle
1

Das Click-Ereignis brodelt technisch nicht. Dieses Ereignis wird von Ihrem Code ausgelöst und verarbeitet, aber das Listensteuerelement überwacht auch das Click-Ereignis und löst ein ItemCommand-Ereignis aus. Es gibt keine Möglichkeit, das zu verhindern, weil Sie nicht einmal garantieren können, welcher Event-Handler zuerst aufgerufen wird.

Verfügen Sie über einen CommandName, der mit der Schaltfläche verknüpft ist, die nicht ausgelöst werden soll? Sie sollten Ihr Button_Click-Ereignis wahrscheinlich vollständig loswerden und Ihre Befehlsbearbeitung im ItemCommand-Ereignis durchführen, indem Sie die Ereignisargumente für den CommandName überprüfen und entsprechend reagieren.

Mit anderen Worten, verwenden Sie einen CommandName, der angibt, was Sie erreichen möchten, und führen Sie dann im ItemCommand-Ereignis nur eine Aktion aus, wenn Sie einen CommandName sehen, für den Sie verantwortlich sind.

    
Josh 03.12.2009 20:45
quelle
0

Setzen Sie e.Handled = true (wenn e der Name Ihres Ereignisses ist).

    
JamesL 30.11.2009 21:13
quelle

Tags und Links