Comment puis-je obtenir un UpdatePanel à l'interception d'une CompositeControl de DropDownList
J'ai un CompositeControl qui contient un DropDownList.
J'ai mis la propriété AutoPostBack de la DropDownList de vrai.
Sur la page, j'ai:
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
<MyControl:Control ID="CustomControl" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
J'ai aussi essayé de réglage ChildrenAsTriggers="true" et UpdateMode="Toujours", mais ni le problème est résolu.
Le problème est que l'UpdatePanel n'est pas de l'interception de la CompositeControl de DropDownList poste d'arrière. (Un POST complet est effectué lors de la DropDownList est changé)
Comment puis-je obtenir de l'UpdatePanel pour gérer la publication?
Merci!
Edit -- A Demandé Info
Pays, et les états sont à la fois DropDownLists dans la CompositeControl.
country.SelectedIndexChanged += new EventHandler(country_SelectedIndexChanged);
protected void country_SelectedIndexChanged(Object sender, EventArgs e)
{
states.DataSource = XXX;
states.DataBind();
}
- Avez-vous d'autres UpdatePanels sur la page ou à l'intérieur de votre contrôle? Aussi, pouvez-vous montrer le code pour la DropDownList de l'événement SelectedIndexChanged gestionnaire et le délégué de la définition.
- Non, je n'ai pas d'autres UpdatePanels sur la page ou dans le contrôle. Je vais modifier mon post pour afficher le gestionnaire.
Vous devez vous connecter pour publier un commentaire.
Ok, donc ce ne peut pas être la meilleure réponse, mais je pense que le problème que vous rencontrez que l'UpdatePanel juste ne peut pas voir l'enfant contrôle de l'événement. Les bonnes nouvelles sont, il est facile d'y remédier. Disons que vous avez un contrôle (CatchMyEvent, qui en passant est un fou intelligent du nom) et il a un DropDownList sur elle. Maintenant vous voulez que le parent de la page pour voir l'événement SelectedIndexChanged le feu sur la liste et mettre à jour un label pour correspondre à la SelectedItem.Texte. Comme il est, le parent ne peut pas vraiment le faire. Donc, nous allons changer cela:
Fondamentalement, tout ce que je fait est d'avoir le contrôle de la capture de la DropDownList de l'événement SelectedIndexChanged et tira de sorte que toute la page parent ou de contrôle pouvait le voir. Essentiellement, tout ce que j'ai fait est passé dessus. Maintenant sur la page parent, il est vraiment facile à capturer.
Vous avez juste besoin d'ajouter un UpdatePanel avec un déclencheur qui contient:
...et bien sûr ajouter à cela le code-behind de la page parent:
Où l'étiquette est au-dessus de l'étiquette. Et puis laissez la magie se produire.
Également deux remarques:
1) Ne pas être un idiot comme je l'ai été lors de l'essai de ce et d'oublier de définir la propriété AutoPostBack sur la DropDownList de vrai.
2) assurez-vous que l'étiquette est à l'UpdatePanel de ContentTemplate.
Espère que cette aide.
J'ai dû répéter les contrôles enfants (zone de texte et des étiquettes) dans une liste, à l'intérieur d'un UpdatePanel.
La modification de la zone de texte serait la cause d'une complète (synch) publication (postback).
J'ai ajouté l'élément de la PAGE (la première ligne dans le .page aspx) : ClientIDMode="AutoID"
Le problème est résolu pour moi, et maintenant que l'UpdatePanel actualise - comme vous le souhaitez.
J'ai fait ce qui suit à la fin de la BuildControlHierarchy:
Juste assurez-vous que tous les contrôles dans l'ensemble de votre hiérarchie a un set ID.
Voir cette question.