Comment puis-je ajouter par programme déclenche une ASP.NET UpdatePanel?

Je suis en train d'écrire un générateur de devis. Pour chaque produit, il existe un ensemble d'options. Je veux ajouter dynamiquement une liste déroulante pour chaque option, puis ont leurs événements SelectedIndexChanged tous filaire pour mettre à jour la citation du coût.

Je ne suis pas du tout avoir de la difficulté à ajouter les contrôles DropDownList à mon UpdatePanel, mais je n'arrive pas à relier les événements.

Après le chargement de la page, les menus déroulants sont là, avec leurs données, mais en changeant de ne pas appeler l'événement SelectedIndexChanged gestionnaire, ni le QuoteUpdatePanel mise à jour.
J'ai quelque chose comme ceci:

Edit: Depuis ajouter par programme AsyncPostBackTrigger contrôles n'est pas pris en charge, j'ai changer mon code, mais je ne comprends toujours pas le cas:

Edit 2: Essayé d'ajouter un espace Réservé pour ajouter des listes déroulantes (au lieu directement dans le ContentTemplateContainer, toujours pas de manifestations de tir.

QuotePanel.ASCX

<asp:ScriptManager ID="ScriptManager" runat="server" />

<asp:UpdatePanel ID="QuoteUpdatePanel" runat="server" ChildrenAsTriggers="true">
    <ContentTemplate>
        Cost: <asp:Label ID="QuoteCostLabel" runat="server" />
        <fieldset id="standard-options">
            <legend>Standard Options</legend>
            <asp:UpdatePanel ID="StandardOptionsUpdatePanel" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
                <ContentTemplate>
                <asp:PlaceHolder ID="StandardOptionsPlaceHolder" runat="server" />                   
                </ContentTemplate>
            </asp:UpdatePanel>
        </fieldset>
    </ContentTemplate>
</asp:UpdatePanel>

Le code pour ajouter les listes déroulantes et les cas où ils sont à câbler pour:

protected void PopluateUpdatePanel(IEnumerable<IQuoteProperty> standardOptions)
{
    foreach (IQuoteProperty standardOp in standardOptions)
    {
        QuotePropertyDropDownList<IQuoteProperty> dropDownList = new QuotePropertyDropDownList<IQuoteProperty>(standardOp);
        dropDownList.SelectedIndexChanged += QuotePropertyDropDown_SelectedIndexChanged;
        dropDownList.ID = standardOp.GetType().Name + "DropDownList";
        dropDownList.CssClass = "quote-property-dropdownlist";

        Label propertyLabel = new Label() {Text = standardOp.Title, CssClass = "quote-property-label"};

        StandardOptionsPlaceHolder.Controls.Add(propertyLabel);
        StandardOptionsPlaceHolder.Controls.Add(dropDownList);

        _standardOptionsDropDownLists.Add(dropDownList);

        ScriptManager.RegisterAsyncPostBackControl(dropDownList);

    }

}

void QuotePropertyDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
    QuoteCostLabel.Text = QuoteCost.ToString();
    StandardOptionsUpdatePanel.Update();
}
Dang! Pas d'entrée?

OriginalL'auteur scottm | 2010-04-26