ASP.NET - Add Event Handler auf Linkbutton innerhalb des Repeater in einem RenderContent Anruf

StackOverflow https://stackoverflow.com/questions/122821

Frage

Ich habe eine Sharepoint WebPart bekommt, die einen benutzerdefinierten User Control lädt. Die Benutzersteuerung enthält einen Repeater, die mehrere Linkbuttons wiederum enthält.

Im RenderContent Aufruf im Webpart habe ich einige Codes bekam Event-Handler hinzuzufügen:

        ArrayList nextPages = new ArrayList();
        //populate nextPages ....
        AfterPageRepeater.DataSource = nextPages;
        AfterPageRepeater.DataBind();

        foreach (Control oRepeaterControl in AfterPageRepeater.Controls)
        {
            if (oRepeaterControl is RepeaterItem)
            {
                if (oRepeaterControl.HasControls())
                {
                    foreach (Control oControl in oRepeaterControl.Controls)
                    {
                        if (oControl is LinkButton)
                        {
                            ((LinkButton)oControl).Click += new EventHandler(PageNavigateButton_Click);
                        }
                    }
                }
            }
        }

Die Funktion PageNavigateButton_Click wird jedoch nie genannt. Ich kann es als Event-Handler im Debugger sehen wird jedoch hinzugefügt.

Irgendwelche Ideen? Ich bin ratlos, wie dies zu tun.

War es hilfreich?

Lösung

Mit der Zeit RenderContent () aufgerufen wird, werden alle registrierten Ereignishandler wurden vom Framework aufgerufen. Sie müssen die Event-Handler in einem früheren Verfahren, wie OnLoad () hinzuzufügen:

protected override void OnLoad(EventArge e)
 { base.OnLoad(e);
   EnsureChildControls();

   var linkButtons = from c in AfterPageRepeater.Controls
                                                .OfType<RepeaterItem>()
                     where c.HasControls()
                     select c into ris
                        from lb in ris.OfType<LinkButton>()
                        select lb;

   foreach(var linkButton in linkButtons)
    { linkButton.Click += PageNavigateButton_Click
    }                          
 }

Andere Tipps

Haben Sie versucht, die Command und Command Eigenschaften jeder Taste zuweisen, wie Sie durch laufen? Das Repeater-Steuerelement unterstützt das ItemCommand Ereignis, das ein Ereignis ist, das ausgelöst wird, wenn eine Kontrolle mit der Commandname-Eigenschaft getroffen wird.

Von dort aus ist es einfach genug, um zu verarbeiten, weil die Command und Command Werte in das Ereignis übergeben werden und leicht zugänglich sind.

Sie müssen sicherstellen, dass der Link-Taste ist mit dem Steuerbaum erneut hinzugefügt und / oder dass das Ereignis an die Steuerung vor dem Ereignis ausgelöst wird neu verdrahtet nach oben.

Artikel @ 4guysfromrolla

Ich habe noch nie eine Sharepoint-WebPart getan, so dass ich weiß nicht, ob dies gilt. Aber wenn es eine einfache alte APSX Seite wäre, würde ich sagen, dass durch die Zeit, es zu machen, ist es zu spät ist. Versuchen Sie, die Event-Handler in der Kontrolle des Init oder PreInit Ereignisse.


Edit: Warten Sie, ich glaube, Dilli-O richtig sein könnte. Siehe die Hinzufügen von Button-Steuerelement zu einem Repeater Abschnitt am Ende der http://www.ondotnet.com/pub/a/dotnet/2003/03/03/repeater.html . Es ist in VB.NET, aber Sie können die gleiche Sache in C # leicht tun.

Wie andere haben darauf hingewiesen, die Sie hinzufügen die Ereignishandler zu spät im Lebenszyklus Seite. Für Sharepoint WebParts würden Sie in der Regel wollen die Klasse außer Kraft zu setzen OnInit / Create Methoden, um die Aktivität zu behandeln.

scroll top