L'ajout de PostBackTriggers et AsyncPostBackTriggers à UpdatePanel pour générées dynamiquement petit-contrôles

J'ai une page avec un ScriptManager, un générique HTML liste déroulante (<select>), et un UpdatePanel. L'UpdatePanel contient un espace Réservé (pour l'instant). Au cours de Page_Load, un certain nombre de contrôles utilisateur sont ajoutés à l'espace Réservé (vraiment, c'est plusieurs instances de la même contrôle de l'utilisateur). Le nombre à ajouter n'est pas connue jusqu'à ce que le chargement de la page, de sorte qu'ils ne doivent être chargés dynamiquement. La liste déroulante est rempli avec le même nombre d'éléments de menu, et il y a du javascript sur la page également (à l'aide de jQuery) pour afficher uniquement les commandes à l'heure en fonction de l'état de la liste déroulante.

Chaque utilisateur de contrôle dispose de deux boutons qui devrait générer une publication asynchrone, une liste déroulante qui devrait générer une publication asynchrone sur un changement de la valeur sélectionnée, et un bouton qui devrait générer un synchrone de publication. Si je n'étais pas générer les contrôles dynamiquement, et si il n'y avait qu'un seul contrôle, la structure serait quelque chose comme:

<asp:UpdatePanel ID="myUpdatePanel" runat="server" UpdateMode="Conditional"
                 ChildrenAsTriggers="false">
    <ContentTemplate>
        <asp:TextBox ID="textBox1" runat="server" />
        <asp:TextBox ID="textBox2" runat="server" />
        <asp:Button ID="asyncButton1" runat="server" Text="Button1"
                    onclick="asyncButton1_Click" />
        <asp:DropDownList ID="asyncDropDown" ruant="server" AutoPostBack="true"
                    OnSelectedIndexChanged="asyncDropDown_SelectedIndexChanged" />
        <asp:Button ID="asyncButton2" runat="server" Text="Button2"
                    OnClick="asyncButton2_Click" />
        <asp:Button ID="syncButton" runat="server" Text="SyncButton"
                    OnClick="syncButton_Click" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="asyncButton1" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="asyncButton2" EventName="Click" />
        <asp:AsyncPostBackTrigger ControlID="asyncDropDown"
            EventName="SelectedIndexChanged" />
        <asp:PostBackTrigger ControlID="syncButton" />
    </Triggers>
</asp:UpdatePanel>

Bien sûr, tous les contrôles à l'intérieur de la ContentTemplate serait en fait une partie de chaque contrôle de l'utilisateur.

Ajoutant les déclencheurs sur le côté serveur ne semble pas fonctionner, car aucune ControlID semble pour aider à l'UpdatePanel trouver les contrôles pertinents. Je peux utiliser l'ID du contrôle ou le contrôle de l'id unique, et il ne fonctionne pas, et j'obtiens une erreur le long de la lignes de

A control with ID 'ctl00$ContentPlaceHolder1$ctl01$asyncButton1' could not be
found for the trigger in UpdatePanel 'myUpdatePanel'.

Alors, je me demande si j'ai besoin d'enregistrer les déclencheurs dans le client au lieu d'utiliser ASP.NET Ajax. J'ai trouvé cette page que, fondamentalement, explique comment. Cependant, je ne sais pas comment pour obtenir le EventName pris en considération. Les exemples que j'ai vu jusqu'à présent ont tout simplement été l'ajout de clics sur le bouton, mais je ne sais pas comment gérer l'événement SelectedIndexChanged à partir de la liste déroulante.

Toute l'aide ici? Existe-il des exemples là-bas que j'ai raté? Cela n'aide pas, bien sûr, que la méthode dans le lien que j'ai donné semble être "non officiel", donc je ne vois pas de MSDN de documents sur le sujet.

Merci!

Êtes-vous à l'aide .net framework 4.0? Je demande parce que maintenant vous avez plus de contrôle sur le Contrôle.ClientID: msdn.microsoft.com/en-us/library/...
Non, ce doit être .NET 3.5 pour l'instant.
tagged as 3.5. Je vais aller pour voir de plus près plus tard.

OriginalL'auteur Andrew | 2011-01-20