{"id":29,"date":"2008-08-12T10:41:33","date_gmt":"2008-08-12T08:41:33","guid":{"rendered":"http:\/\/dev.flauschig.ch\/wordpress\/?p=29"},"modified":"2009-08-21T08:57:28","modified_gmt":"2009-08-21T06:57:28","slug":"findcontrol-in-controls-mit-ids","status":"publish","type":"post","link":"http:\/\/dev.flauschig.ch\/wordpress\/?p=29","title":{"rendered":"FindControl in Controls mit IDs"},"content":{"rendered":"<p>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 \u00fcber Page.FindControl das ensprechende Control finden es entsprechend anpassen. So weit so gut, doch was tun, wenn nun dieser Extender in einem Repeater ist?<!--more--><\/p>\n<p>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 \u00fcberschreibt dessen FindControl am besten so:<\/p>\n<pre class=\"brush: csharp; gutter: true; title: ; toolbar: true; wrap-lines: false; notranslate\" title=\"\">\r\npublic override Control FindControl(string id)\r\n{\r\n\treturn FindControlHelper(id);\r\n}\r\nprotected Control FindControlHelper(string id)\r\n{\r\n    Control c = null;\r\n    if (id != null &amp;&amp; id != String.Empty)\r\n    {\r\n        \/\/ Try the Base FindControl first\r\n        c = base.FindControl(id);\r\n\r\n        \/\/ Try to loop trhu the NamingContainers\r\n        Control nc = NamingContainer;\r\n        while (c == null &amp;&amp; nc != null)\r\n        {\r\n            c = nc.FindControl(id);\r\n            nc = nc.NamingContainer;\r\n        }\r\n    }\r\n\r\n    \/\/ Return the Control\r\n    return c;\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>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 \u00fcber Page.FindControl das ensprechende Control finden es entsprechend anpassen. So weit so gut, doch was tun, wenn nun dieser Extender in einem Repeater ist?<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[5,3],"tags":[56,55,58,57],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-roemer","4":"has-more-link","5":"post-29","7":"format-standard","8":"category-asp","9":"category-programming","10":"post_tag-clientid","11":"post_tag-extender","12":"post_tag-namingcontainer","13":"post_tag-repeater"},"acf":[],"views":2225,"_links":{"self":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/29"}],"collection":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=29"}],"version-history":[{"count":0,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/29\/revisions"}],"wp:attachment":[{"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dev.flauschig.ch\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}