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();
}
OriginalL'auteur scottm | 2010-04-26
Vous devez vous connecter pour publier un commentaire.
autant que je sache, l'ajout d'async déclenche à laUpdatePanel
contrôle par programme fonctionne.La solution de contournement consiste à ajouter dans
Page_Init
de l'événement et de l'ensemble du déclencheurControlID
propriété pour le contrôle de la valeur d'id unique:Semble fait ce travail. J'ai créé une structure similaire de page/de contrôle ci-dessus. Il y a donc de contrôle de l'utilisateur
QuotePropertyControl
etDefault
page qui détient ce contrôle.J'ai ajouté
dropDownList.AutoPostBack = true
bien et a réussi à attraper un async publication de la liste déroulante. Donc, deviner le problème était dans cette propriété.Une chose de plus: c'est vraiment n'a pas d'importance comment vous inscrire async déclencheur; les deux variantes
ScriptManager.RegisterAsyncPostBackControl
et à traversAsyncPostBackTrigger
a fonctionné comme un charme (jusqu'à ce que l'événement init de la page).Voici comment j'ai fait:
QuotePropertyControl.ascx.cs
QuotePropertyControl.ascx
Par défaut.aspx.cs
Par défaut.aspx
Je vais essayer de mon côté et de faire rapport sur les progrès
C'était le problème! merci
Aucune idée de pourquoi je ne peux maintenir la liste déroulante affichage de l'état? Il ne cesse de changer à leur valeur par défaut
Pourriez-vous expliquer le problème avec plus de détails? Il semble viewstate est chargé normalement.
OriginalL'auteur Alex