ASP.NET - Steuern Sie Ereignisse, die nicht im Repeater ausgelöst werden

8

Das ist ein absurd häufiges Problem und nachdem ich alle offensichtlichen Lösungen ausgeschöpft habe, hoffe ich, dass SO mir etwas Input anbieten kann ... Ich habe ein UserControl in einer Seite, die einen Repeater enthält, der mehrere Steuerelemente enthält, die Postback verursachen. Das Problem ist, dass alle Steuerelemente innerhalb des Repeaters ihre Ereignisbehandlungsroutinen beim Postback nie berühren, aber die Steuerungen außerhalb des Repeaters (immer noch im UC) werden korrekt behandelt. Ich habe bereits sichergestellt, dass meine Steuerelemente aufgrund eines fehlenden if(!IsPostBack) nicht neu generiert wurden, und ich habe überprüft, dass Request.Form ["__ EVENTTARGET"] die richtige Steuerelement-ID im Page_Load-Ereignis enthielt. Ich habe versucht, die Symptome in einem separaten Projekt zu reproduzieren und es funktionierte wie es sollte.

%Vor% %Vor%

Der Code enthält absichtlich keine Funktionalität, ignorieren Sie diese Tatsache einfach.

    
Nathan Taylor 23.11.2009, 20:34
quelle

5 Antworten

3

Ihr bearbeiteter Code hat die restlichen Eigenschaften CommandArgument und CommandName ; Behandelst du tatsächlich das Repeater.ItemCommand Event?

Wenn dies der Fall ist und Ihre Seite die Methode Fill des Steuerelements für Postbacks aufruft, würde dies dies erklären.

Dieses klassische ASP.NET Haarausfallproblem wird in diesen Posts erklärt: Ein Stumper von einem ASP.NET-Frage und Ein Stumper einer ASP.NET-Frage: Gelöst!

Die Erklärung ist ein wenig verwirrend, aber der Knackpunkt ist, dass Repeater.DataBind die Fähigkeit von ASP.NET stört, zu bestimmen, welcher Repeater-Button ein Postback verursacht hat.

    
Jeff Sternal 23.11.2009 21:59
quelle
2

Ich habe ein fehlendes td-Tag in Itemtemplate gefunden, manchmal, wenn DOM falsch ist, macht das updatapanel seltsame Dinge.

    
Henrik Adolfsson 23.11.2009 20:39
quelle
2

Fast jedes Mal, wenn ich auf dieses Problem stoße, liegt es daran, dass DataBind () aufgerufen wird, wenn es nicht sein sollte. Dadurch werden die meisten Ereignisse von Steuerelementen in einem Repeater beendet. Ich sehe, Sie haben ein! IsPostBack überprüfen Sie Ihre Page_Load ... also das ist ein Anfang. Versuchen Sie jedoch, einen Haltepunkt auf repNotes.DataBind () zu setzen, und sehen Sie, ob es aufgerufen wird, wenn Sie es nicht erwarten.

Funktioniert es außerhalb eines UpdatePanels?

    
Bryan 24.11.2009 08:01
quelle
0

Ich stieß auf das gleiche Problem. Es ist mir passiert, wenn ich den DataBind zweimal ausgeführt habe. Mit anderen Worten, wenn ich das Repeater-Steuerelement zweimal (aus irgendeinem Grund) bevölkere, werden die Ereignisse nicht ausgelöst.

Ich hoffe, das hilft.

    
Teddy 16.11.2010 20:05
quelle
0

Ich bin auch auf dieses Problem gestoßen. Hat mich verrückt gemacht, weil ich meinen Repeater nicht wieder anbindete, ich habe versucht, dynamisch einen Event-Handler hinzuzufügen, die ViewState-Einstellungen überall zu ändern, nichts hat funktioniert.

Die Antwort in meinem Fall war, dass ich "Page.DataBind ()" auf der Masterseite aufgerufen habe, um einige Codebehind-Variablen zu behandeln, die mit der & lt;% # MyVar% & gt; Syntax.

Sobald ich das PageDataBind () herausgenommen hatte, funktionierte es, ich musste nur die Vorlagenseite umkodieren, um diese Daten auf eine andere Weise einzuziehen.

Ich nehme an, wenn Sie eine DataBind () irgendwo entlang der Kette für Ihre Seite, Benutzerkontrolle, Seitenbasisklasse, Masterseite usw. machen, könnte dies Ihren Viewstatus und Event-Bubbling zerstören.

    
Mxyzptlk 22.05.2012 15:11
quelle