2012-04-05 1 views
0

Je suis bloqué sur ce problème et je n'arrive pas à le contourner. J'ai un contrôle CheckBoxList. Si vous ne le saviez pas, la méthode FindControl() du contrôle CheckBoxList renvoie "this". Microsoft l'a fait parce qu'en interne ils ne créent pas beaucoup d'objets ListItem mais juste un. De toute façon, j'essaie de savoir si un contrôle de retour posté est l'un des contrôles dans ma CheckBoxList. Mon code ressemble à quelque chose le long des lignes de:ASP.NET Essayer de trouver si un ID que j'ai est un contrôle enfant d'un contrôle CheckBoxList

if (!(System.Web.UI.ScriptManager.GetCurrent(Page) == null)) { 
string postbackControlId =   System.Web.UI.ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID; 
    if (!string.IsNullOrEmpty(postbackControlId)) 
    { 
     Control control = ControlFinder.RecursiveFindChildControl(Controls, postbackControlId); 
     if (!(control == null)) 
     { } 
    } 
} 

est-il de toute façon d'énumérer les contrôles enfants d'un CheckBoxList ou trouver si un identifiant que j'ai est égal à l'un des leurs?

Merci, Mike

Répondre

0

Le UniqueID d'un CheckBox dans un CheckBoxList est le UniqueID du CheckBoxList plus un $ ainsi que l'indice de l'élément, de sorte que vous pouvez vérifier si postbackControlId est l'un des CheckBox contrôles comme ceci:

if (postbackControlId.StartsWith(this.checkBoxList.UniqueID + "$")) 
{ 
    int itemIndex = Convert.ToInt32(
     postbackControlId.Substring(this.checkBoxList.UniqueID.Length + 1), 10); 
    // ... 
} 
+0

Merci à vous. C'est exactement ce que j'ai commencé à faire aussi – BlueChameleon

0

Si vous cherchez seulement à savoir si le postback a été causé par l'un des éléments du CheckBoxList, vous n'avez pas besoin de traverser toute la hiérarchie de contrôle. Vous n'avez même pas besoin d'explorer la liste. Quelque chose comme cela fonctionne bien:

string elementID = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID; 
if (elementID.Contains(chkList.UniqueID)) 
{ 
    //one of the checkboxes caused the postback 
} 
Questions connexes