Wer schon mit dem AjaxToolkit gearbeitet hat kennt das Prinzip der Extender. Dabei werden dem Extender jeweils die ClientIDs der Controls mitgegeben, die entsprechend erweitert werden sollen. Der Extender kann dann über Page.FindControl das ensprechende Control finden es entsprechend anpassen. So weit so gut, doch was tun, wenn nun dieser Extender in einem Repeater ist?
NamingContainer ist hier das Stichwort. Statt nur in der Page zu suchen, durchsucht man den NamingContainer (und evtl. weitere darunterliegende NamingContainer). Wer nun also einen eigenen Extender schreiben will überschreibt dessen FindControl am besten so:
public override Control FindControl(string id) { return FindControlHelper(id); } protected Control FindControlHelper(string id) { Control c = null; if (id != null && id != String.Empty) { // Try the Base FindControl first c = base.FindControl(id); // Try to loop trhu the NamingContainers Control nc = NamingContainer; while (c == null && nc != null) { c = nc.FindControl(id); nc = nc.NamingContainer; } } // Return the Control return c; }