<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://www.aspnetzone.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tag 'ClientID'</title><link>http://www.aspnetzone.de/search/SearchResults.aspx?o=DateDescending&amp;tag=ClientID&amp;orTags=0</link><description>Search results matching tag 'ClientID'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>AW: UserControl - Content von Seite in UserControl kopiert = Event wird nicht mehr gefeuert</title><link>http://www.aspnetzone.de/forums/post/212441.aspx</link><pubDate>Tue, 25 Aug 2009 14:26:14 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:212441</guid><dc:creator>Garry Cooper</dc:creator><description>&lt;P&gt;Hallo,&lt;/P&gt;
&lt;P&gt;auch dir sei Dank fürs Antworten!&lt;/P&gt;
&lt;P&gt;Also das Javascript wird im ItemCreated Event gerendert. Allerdings mit schlechtesten Methoden -&amp;gt; Daher resultiert auch das Problem : Nach dem Postback wird die Seite nicht neu geladen sondern nur der Event neu Initialisiert und damit ist der _counter nicht bei -1. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Hat jemand vielleicht eine Methode um an den Index zu kommen (listView.Items.Count bleibt immer auf 0 - Dummerweise)&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Also sollte ich entweder die Seite komplett neu laden - was wahrscheinlich am besten ist denn in dem UserControl werden Werte verändert die als Grundlage für Werte anderer Listen der Seite gelten. &lt;/P&gt;
&lt;P&gt;Da wären wir gleich beim nächsten Problem - &lt;STRONG&gt;Wie lädt macht man denn einen Page Refresh aus einem UserControl herraus?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;das ItemCreated Event auszugsweise:&lt;/P&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;int&lt;/span&gt; _counter &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; -1;&lt;br /&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; listViewBookmarks_ItemCreated(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, ListViewItemEventArgs e) {&lt;br /&gt;   _counter += 1;&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; textBoxTagsLocalID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;;&lt;br /&gt;   textBoxTagsLocalID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"ctl00_ctl00_cphMstrMain_cphMstrDocuments_ctl00_listViewBookmarks_"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; e.Item.ClientID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"_textboxTags"&lt;/span&gt;;&lt;br /&gt;   PlaceHolder placeHolderDiv &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; (PlaceHolder) e.Item.FindControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"placeHolderDiv"&lt;/span&gt;);&lt;br /&gt;   placeHolderDiv.Controls.Add(&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; LiteralControl(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"&amp;lt;div id=\"divBookmarkEditPanel"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; _counter &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;+&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"\" style=\" display:none;\"&amp;gt;"&lt;/span&gt;));&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;</description></item><item><title>c# ClientID mit Pfadangabe von MasterPages in einem ItemCreated Event ??</title><link>http://www.aspnetzone.de/forums/post/212432.aspx</link><pubDate>Tue, 25 Aug 2009 09:40:08 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:212432</guid><dc:creator>Garry Cooper</dc:creator><description>&lt;P&gt;Hallo,&lt;/P&gt;
&lt;P&gt;also ich fange in einem ListView ItemCreated Event eine Server TextBox ab und möchte die erzeugte ClientID mit Pfadangaben vom Master. Die ID von textBox.ClientID (z.B. "ctl001_textBox") enthält leider keinen Pfad?! Woher bekommt man die&amp;nbsp;denn?&lt;/P&gt;</description></item><item><title>Zwei Ans&amp;#228;tze wie mit den ClientIDs von ASP.NET umgegangen werden kann</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2008/09/02/zwei-ans-tze-wie-mit-den-clientids-von-asp-net-umgegangen-werden-kann.aspx</link><pubDate>Mon, 01 Sep 2008 22:57:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:201359</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Wie den meisten schon bekannt sein wird, erzeugt ASP.NET &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx"&gt;ClientIDs&lt;/A&gt; die auf dem Client genutzt werden können um Namenskollisionen aus dem Weg zu gehen. &lt;BR&gt;Jedoch ist dieses Verhalten in manchen (Bei mir in den meisten Fällen) fehl am Platz und es ist mühselig die ClientIDs clientseitig zur Verfügung zu stellen.&lt;/P&gt;
&lt;P&gt;Es gibt zwar, &lt;A href="http://blogs.msdn.com/walzenbach/archive/2007/10/17/wie-referenziere-ich-ein-control-in-javascript-dessen-namen-durch-inamingcontainer-ge-ndert-wurde.aspx"&gt;diese&lt;/A&gt; oder &lt;A href="http://peter.hahndorf.eu/blog/2008/05/09/getElementByIdProblemsInAspnet.aspx"&gt;jene&lt;/A&gt; Lösung - jedoch war für mich keine wirklich zufriedenstellend. &lt;BR&gt;Ich möchte euch Heute zwei Ansätze mit auf den Weg geben, damit die Arbeit mit Javascript und ASP.NET für euch nicht immer zur ID-Jagt wird.&lt;/P&gt;
&lt;P&gt;Der erste Ansatz basiert unter anderem auf einer &lt;A href="http://www.drescher-hackel.de/CCED0B19-C6A9-40D6-A58A-7BF4C54D750A/ClientID+vom+ServerControl+automatisiert+verf%c3%bcgbar+machen.content.aspx"&gt;Idee&lt;/A&gt; von &lt;A href="http://www.aspnetzone.de/members/reneXYX.aspx"&gt;Renè Drescher-Hackel&lt;/A&gt;, auch ein ASP.NET Zone Genosse :) &lt;BR&gt;Renè erstellt mithilfe von JSON ein Javascript Objekt, mit dem einfach auf die ClientIDs und ggf. noch weitere Eigenschaften zugegriffen werden kann.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ClientIdProvider mit einem HttpModule und statischen Hilfsmethoden&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Ich wollte eine Lösung bei der ich möglichst wenig schreiben muss, nur das wichtigste bekomme und auch die Performance stimmt. &lt;BR&gt;Die Lösung ist relativ einfach gehalten. Es braucht ein Methodenaufruf um ein Control für den Provider zu registrieren, danach steht die ClientID in Javascript automatisch über ClientId.&amp;lt;ControlName&amp;gt; bereit.&lt;/P&gt;
&lt;P&gt;Dabei muss natürlich beachtet werden, dass nicht zwei gleichlautende Controls registriert werden.&lt;/P&gt;
&lt;P&gt;Die Anwendung sieht dann so aus:&lt;/P&gt;
&lt;P&gt;ASPX:&lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;ul&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;a&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;href&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="#"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;onclick&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="addBorder('test');"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;Test1 (Div)&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;li&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;a&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;href&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="#"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;onclick&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="addBorder(ClientId.pnlTest);"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;Test2 (Panel)&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;li&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;a&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;href&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="#"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;onclick&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="addBorder(ClientId.pnlTest2);"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;Test3 (Panel)&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;li&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;ul&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;div&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;id&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="test"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    test &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;div&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;asp:Panel&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;ID&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="pnlTest"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;runat&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="server"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    test2 &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;asp:Panel&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;ID&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="pnlTest2"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;runat&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="server"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;        test3 &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;asp:Panel&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;asp:Panel&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Codebehind:&lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e) { &lt;br /&gt;    Tools.ClientIdProvider.RegisterControlForClientId(pnlTest); &lt;br /&gt;    Tools.ClientIdProvider.RegisterControlForClientId(pnlTest2); &lt;br /&gt;}&lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Das wars auch schon für den Anwender... nur was läuft dahinter ab?&lt;/P&gt;
&lt;P&gt;Die Methode "RegisterControlForClientId(Control c)" speichert jeweils eine Referenz auf das Control &lt;BR&gt;in einer Liste, die in der aktuellen HttpContext.Items Collection gespeichert ist.&lt;/P&gt;
&lt;P&gt;Diese Liste ist vom Begin bis zum Ende des Requests unter dem Key (clientIdCollKey) verfügbar. &lt;BR&gt;Um das JSON auf die Seite zu rendern, muss nur noch die Methode "WriteClientIdCollection(Page page)" zum richtigen Zeitpunkt aufgerufen werden.&lt;/P&gt;
&lt;P&gt;Der richtige Zeitpunkt ist hier wichtig, genau ab Page_PreRender sind alle ClientIDs bestimmt vorhanden. &lt;BR&gt;Also könnte diese Methode einfach in der überschrieben OnPreRender-Methode einer Seite aufgerufen werden.&lt;/P&gt;
&lt;P&gt;Jedoch gibt das wieder Schreibarbeit und ist fehleranfällig. &lt;BR&gt;Um dies zu automatisieren, kann ein HttpModule als Hilfe benutzt werden.&lt;/P&gt;
&lt;P&gt;Die statischen Hilfsmethoden:&lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;namespace&lt;/span&gt; pb.Web &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; partial &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; Tools &lt;br /&gt;    { &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; ClientIdProvider &lt;br /&gt;        { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;private&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;const&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; clientIdCollKey &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"pbclientIdColl"&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Registriert ein Control für die ClientIdCollection, &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// sodass diese auf der Seite verfügbar ist. &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;param name="c"&amp;gt;Das zu registrierende Control&amp;lt;/param&amp;gt; &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; RegisterControlForClientId(Control c) { &lt;br /&gt;                HttpContext context &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; HttpContext.Current; &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; item &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; context.Items[clientIdCollKey]; &lt;br /&gt;&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (item == &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt; || !(item &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;is&lt;/span&gt; IList)) &lt;br /&gt;                    item &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; List&amp;lt;Control&amp;gt;(); &lt;br /&gt;&lt;br /&gt;                (item &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;as&lt;/span&gt; IList&amp;lt;Control&amp;gt;).Add(c); &lt;br /&gt;&lt;br /&gt;                context.Items[clientIdCollKey] &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; item; &lt;br /&gt;            } &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Schreibt die aktuelle ClientIdCollection in die &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// derzeitige Page Instanz &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; WriteClientIdCollection() { &lt;br /&gt;                WriteClientIdCollection(Tools.CurrentHandler&amp;lt;Page&amp;gt;()); &lt;br /&gt;            } &lt;br /&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Schreibt die aktuelle ClientIdCollection in die &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// derzeitige Page Instanz &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;&lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;static&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; WriteClientIdCollection(Page page) { &lt;br /&gt;                HttpContext context &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; HttpContext.Current; &lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; item &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; context.Items[clientIdCollKey]; &lt;br /&gt;&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (item == &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;) &lt;br /&gt;                    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;return&lt;/span&gt;; &lt;br /&gt;&lt;br /&gt;                IList&amp;lt;Control&amp;gt; list &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; (item &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;as&lt;/span&gt; List&amp;lt;Control&amp;gt;); &lt;br /&gt;                StringBuilder sb &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;new&lt;/span&gt; StringBuilder(); &lt;br /&gt;&lt;br /&gt;                &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;foreach&lt;/span&gt; (Control c &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; list) { &lt;br /&gt;                    sb.Append(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;""&lt;/span&gt;); &lt;br /&gt;                    sb.AppendFormat(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"\"{0}\" : \"{1}\""&lt;/span&gt;, c.ID, c.ClientID); &lt;br /&gt;                    sb.Append(&lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;","&lt;/span&gt;); &lt;br /&gt;                } &lt;br /&gt;&lt;br /&gt;                &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;// TODO: Ab ASP.NET 3.5 kann hier stattdessen der &lt;/span&gt;&lt;br /&gt;                &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;//TODO: System.Web.Script.Serialization.JavaScriptSerializer benutzt werden &lt;/span&gt;&lt;br /&gt;                page.ClientScript.RegisterStartupScript(page.GetType(), &lt;br /&gt;                                                                    &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"ClientId"&lt;/span&gt;, &lt;br /&gt;                                                                    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt;.Format( &lt;br /&gt;                                                                    &lt;span style="color: #666666;background-color: #e4e4e4;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"\r\n var ClientId = new Object(); \r\n eval('ClientId = {{{0}}}');\r\n"&lt;/span&gt;, &lt;br /&gt;                                                                    sb.ToString().Substring(0, sb.ToString().Length &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;-&lt;/span&gt; 1)), &lt;br /&gt;                                                                    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;true&lt;/span&gt;); &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Das HttpModule ist ziemlich einfach aufgebaut, es hängt sich in den PreRequestHandlerExecute-Event, &lt;BR&gt;ruft den aktuellen Handler ab und führt in dessen PreRender-Event die Methode der Tools-Klasse aus, um &lt;BR&gt;das JSON zu rendern.&lt;/P&gt;
&lt;P&gt;Somit geschieht alles vollautomatisch, es muss nur das HttpModule in der web.config registriert sein.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Das ClientIdProviderModule:&lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;namespace&lt;/span&gt; pb.Web.HttpModules &lt;br /&gt;{ &lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;summary&amp;gt; &lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Registriert alle ClientIds als Startupscript in der aktuellen Page, &lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// falls Controls registriert wurden. &lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt; &lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; ClientIdProviderModule : XHttpModuleBase &lt;br /&gt;    { &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; _application_PreRequestHandlerExecute(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e) { &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;._application_PreRequestHandlerExecute(sender, e); &lt;br /&gt;&lt;br /&gt;            IHttpHandler handler &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; Tools.CurrentHandler&amp;lt;IHttpHandler&amp;gt;(); &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt; (handler !&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; handler &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;is&lt;/span&gt; Page) { &lt;br /&gt;                Page page &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; handler &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;as&lt;/span&gt; Page; &lt;br /&gt;                page.PreRender += &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;delegate&lt;/span&gt; { &lt;br /&gt;                                                   Tools.ClientIdProvider.WriteClientIdCollection(page); &lt;br /&gt;                                               }; &lt;br /&gt;            } &lt;br /&gt;        } &lt;br /&gt;    } &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Beispiel web.config-Eintrag:&lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;xml&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;version&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="1.0"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;?&amp;gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;configuration&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    &amp;lt;system.web&amp;gt; &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;httpModules&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;            &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;add&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;name&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="ClientIdProviderModule"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;type&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="pb.Web.HttpModules.ClientIdProviderModule, ClientIdProviderTest"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/&amp;gt;&lt;/span&gt; &lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;httpModules&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt; &lt;br /&gt;    &amp;lt;/system.web&amp;gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;configuration&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt; &lt;/DIV&gt;
&lt;P&gt;Wichtig ist hier aber die Einschränkung auf Controls die alleinestehen, oder aber in einem TemplateInstance.SingleInstance - Template stehen. &lt;BR&gt;Mit MultiInstance - Templates funktioniert diese Lösung nicht.&lt;/P&gt;
&lt;P&gt;Zu Single- vs MultiInstance, siehe hier:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title=system.web.ui.templateinstance(VS.85).aspx href="http://msdn.microsoft.com/de-de/library/system.web.ui.templateinstance(VS.85).aspx"&gt;system.web.ui.templateinstance(VS.85).aspx&lt;/A&gt; 
&lt;LI&gt;&lt;A title=SingleInstanceTemplates.aspx href="http://www.nikhilk.net/SingleInstanceTemplates.aspx"&gt;SingleInstanceTemplates.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Überschreiben von IDs, damit diese gleich lauten wie die serverseitigen IDs&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.wilcob.com/Wilco/"&gt;Wilco Bauwer&lt;/A&gt;, der unter anderem auch noch viele andere asp.nette Dinge auf seiner Seite anbietet, &lt;BR&gt;hat ein Control entwickelt, dass die ClientIDs so überschreibt, dass sie gleich lauen wie die serverseitigen IDs.&lt;/P&gt;
&lt;P&gt;Für manch ein Anwendungsfall ist das ein Muss und für die anderen vielfach eine gute Lösung mit wenig Aufwand. &lt;BR&gt;Allerdings gilt auch hier, dass nur einzigartige IDs benutzt werden können, ansonsten kommt es zu einer Kollision.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title=http://www.wilcob.com/Wilco/News/AspNetIDOverride.aspx href="http://www.wilcob.com/Wilco/News/AspNetIDOverride.aspx"&gt;http://www.wilcob.com/Wilco/News/AspNetIDOverride.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Was ist jetzt besser?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Keine der beiden Lösungen ist besser.&lt;BR&gt;Bei dem ClientIdProvider bestehen die ClientIDs immer noch genau gleich, jedoch gibt es clientseitig einen einfachen Zugriff darauf. &lt;BR&gt;Beim ID-Overriding gibt es keine ClientIDs mehr bzw. die ClientID lautet gleich wie die ID auf dem Server. Das kann in vielen Szenarien Probleme verursachen (Bspw. Controls die IPostBackEventHandler implementieren funktionieren nicht mehr, etc...).&lt;/P&gt;
&lt;P&gt;Daher gibt es keine Patentlösung, sondern jeweils für die Anforderung eine Lösung die passt.&lt;/P&gt;
&lt;P&gt;Download des Beispielprojekts:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.aspnetzone.de/files/folders/201358/download.aspx"&gt;ClientIdProviderTest.zip&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Benutzte Links:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title=http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx href="http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx"&gt;http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx&lt;/A&gt; 
&lt;LI&gt;&lt;A title=http://blogs.msdn.com/walzenbach/archive/2007/10/17/wie-referenziere-ich-ein-control-in-javascript-dessen-namen-durch-inamingcontainer-ge-ndert-wurde.aspx href="http://blogs.msdn.com/walzenbach/archive/2007/10/17/wie-referenziere-ich-ein-control-in-javascript-dessen-namen-durch-inamingcontainer-ge-ndert-wurde.aspx"&gt;http://blogs.msdn.com/walzenbach/archive/2007/10/17/wie-referenziere-ich-ein-control-in-javascript-dessen-namen-durch-inamingcontainer-ge-ndert-wurde.aspx&lt;/A&gt; 
&lt;LI&gt;&lt;A title=http://peter.hahndorf.eu/blog/2008/05/09/getElementByIdProblemsInAspnet.aspx href="http://peter.hahndorf.eu/blog/2008/05/09/getElementByIdProblemsInAspnet.aspx"&gt;http://peter.hahndorf.eu/blog/2008/05/09/getElementByIdProblemsInAspnet.aspx&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://www.drescher-hackel.de/CCED0B19-C6A9-40D6-A58A-7BF4C54D750A/ClientID+vom+ServerControl+automatisiert+verf%c3%bcgbar+machen.content.aspx"&gt;http://www.drescher-hackel.de/CCED0B19-C6A9-40D6-A58A-7BF4C54D750A/ClientID+vom+ServerControl+automatisiert+verf%c3%bcgbar+machen.content.aspx&lt;/A&gt;
&lt;LI&gt;&lt;A title=http://msdn.microsoft.com/de-de/library/system.web.ui.templateinstance(VS.85).aspx href="http://msdn.microsoft.com/de-de/library/system.web.ui.templateinstance(VS.85).aspx"&gt;http://msdn.microsoft.com/de-de/library/system.web.ui.templateinstance(VS.85).aspx&lt;/A&gt; 
&lt;LI&gt;&lt;A title=http://www.nikhilk.net/SingleInstanceTemplates.aspx href="http://www.nikhilk.net/SingleInstanceTemplates.aspx"&gt;http://www.nikhilk.net/SingleInstanceTemplates.aspx&lt;/A&gt; 
&lt;LI&gt;&lt;A title=http://www.wilcob.com/Wilco/ href="http://www.wilcob.com/Wilco/"&gt;http://www.wilcob.com/Wilco/&lt;/A&gt; 
&lt;LI&gt;&lt;A title=http://www.wilcob.com/Wilco/News/AspNetIDOverride.aspx href="http://www.wilcob.com/Wilco/News/AspNetIDOverride.aspx"&gt;http://www.wilcob.com/Wilco/News/AspNetIDOverride.aspx&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;</description></item><item><title>Ein WebControl das keine ClientID rendert</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2008/02/24/ein-webcontrol-das-keine-clientid-rendert.aspx</link><pubDate>Sun, 24 Feb 2008 13:54:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:192174</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Jedes Control das von der Klasse &lt;EM&gt;WebControl&lt;/EM&gt; erbt, rendert automatisch &lt;EM&gt;ClientID&lt;/EM&gt;s in einem &lt;EM&gt;ID&lt;/EM&gt; Attribut.&lt;BR&gt;Dieses Rendering geschieht in der Methode &lt;EM&gt;AddAttributesToRender&lt;/EM&gt; der Basisklasse WebControl.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Was nun tun, wenn keine &lt;EM&gt;ClientID&lt;/EM&gt;s in der Ausgabe&amp;nbsp;erwünscht sind?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. Die Eigenschaft &lt;EM&gt;ClientID&lt;/EM&gt; überschreiben und null / String.Empty zurückgeben&lt;BR&gt;2. Die Methode &lt;EM&gt;AddAttributesToRender&lt;/EM&gt; übschreiben und dort Logik einbauen&lt;/P&gt;
&lt;P&gt;Nummer 1. hat den Nachteil, dass das Attribut "id" immer noch gerendert wird, einfach mit keinem Inhalt -&amp;gt; fällt eher weg.&lt;BR&gt;Nummer 2 ist genau das gesuchte, laut der Implementierung von WebControl wird das Attribut und dessen Wert weggelassen wenn die Eigenschaft ID null zurückgibt.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Resultat (Für ein HyperLink ohne ClientID Ausgabe):&lt;/STRONG&gt;&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// Ein HyperLink Control, das keine ClientIDs rendert&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Green;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;public&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;class&lt;/span&gt; HyperLinkClientIdLess : HyperLink {&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;override&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; AddAttributesToRender(HtmlTextWriter writer) {&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;string&lt;/span&gt; id &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.ID;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.ID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;base&lt;/span&gt;.AddAttributesToRender(writer);&lt;br /&gt;        &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.ID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; id;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;STRONG&gt;Wieso klappt das?&lt;BR&gt;&lt;/STRONG&gt;In der Methode der Basisklasse ist die Logik, die wir auch immer noch benötigen.&lt;BR&gt;Diese Logik bringt uns das benötigte Verhalten, wenn &lt;EM&gt;ID&lt;/EM&gt; == null ist.&lt;BR&gt;Natürlich brauchen wir die &lt;EM&gt;ID&lt;/EM&gt; später immer noch, deshalb wird sie einfach temporär (Für den Aufruf der Basismethode) auf null gesetzt.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Sinn / Unsinn?&lt;BR&gt;&lt;/STRONG&gt;Ich brauche das bspw. für ein Menu Control. Dort benötige ich keinen clientseitigen Zugriff auf die gerenderten Anker,&lt;BR&gt;somit wären diese überflüssig.&lt;BR&gt;Zudem lässt sich dieses Verhalten rein durch Austauschen des Klassennamens wieder rückgängig machen.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;*Update&lt;/STRONG&gt;&lt;BR&gt;Ganz wichtig ist natürlich, das ein solches Unterfangen jeglichem Control, das Daten zurück an den Server senden&lt;BR&gt;sollte / muss, diese Möglichkeit nimmt.&lt;BR&gt;Ein Calendar Control, eine TextBox wird damit nicht mehr funktionieren bzw. nicht mehr über den normalen Mechanismus von ASP.NET.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;Neue Möglichkeit&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;Aha, ich habe mich geirrt. Es gibt eine generische Lösung.&lt;BR&gt;Bei meiner Lösung habe ich darauf geachtet, das die ID wiederhergestellt wird, jedoch wird diese sowieso nicht mehr benötigt.&lt;BR&gt;Folgende Idee: &lt;A href="http://www.vikramlakhotia.com/Removing_ID_of_controls_to_reduce_HTML_Size.aspx"&gt;http://www.vikramlakhotia.com/Removing_ID_of_controls_to_reduce_HTML_Size.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;D.h. man hängt sich in den PreRender Event irgend eines Control, Typ: "Control" ein, und setzt die ID auf null.&lt;BR&gt;Bspw. so:&lt;/P&gt;
&lt;DIV class=CodeBox&gt;
&lt;P&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt; &lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e) {&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.&amp;lt;Control&amp;gt;.PreRender += &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.DeleteId;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;protected&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;void&lt;/span&gt; DeleteId(&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;object&lt;/span&gt; sender, EventArgs e) {&lt;br /&gt;    (sender &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;as&lt;/span&gt; Control).ID &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;null&lt;/span&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/P&gt;&lt;/DIV&gt;&lt;BR&gt;&lt;STRONG&gt;IDs aller Labels auf der Seite entfernen&lt;/STRONG&gt;&lt;BR&gt;
&lt;P&gt;Und da diese Lösung nur auf den Typ Control angewiesen und deswegen generisch ist,&lt;BR&gt;ergibt sich bspw. die Möglichkeit die ID aller Labels automatisch zu entziehen:&lt;BR&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;ControlCollection controls &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;=&lt;/span&gt; &amp;lt;Alle Controls der Seite (Rekursiver Aufruf)&amp;gt;;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;foreach&lt;/span&gt;(Control c &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;in&lt;/span&gt; controls) {&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;if&lt;/span&gt;(c &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;is&lt;/span&gt; Label) {&lt;br /&gt;        c.PreRender += &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;this&lt;/span&gt;.DeleteId;&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/code&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/DIV&gt;</description></item><item><title>AW: Mit JavaScript IDs ansprechen mit Masterpage&amp;amp;amp;Runat=server</title><link>http://www.aspnetzone.de/forums/post/181182.aspx</link><pubDate>Mon, 11 Jun 2007 10:25:04 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:181182</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;Hallo Julia&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.aspnetzone.de/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;JuliaSchneider:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Ich programmiere noch nicht lange mit ASP.net, finde es aber jetzt schon beeindruckend was diese Technologie beispielsweise im Vergleich zu PHP zu leisten vermag :-)&amp;nbsp;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;Schön zu hören :-)&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.aspnetzone.de/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;JuliaSchneider:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;&lt;BR&gt;&lt;BR&gt;Interessanterweise funktioniert wiederrum auch mit Masterpage/Content-Element alles wenn ich das "runat=server" für die einzelnen Elemente wieder herausnehme. &lt;BR&gt;&lt;BR&gt;Andersherum kann ich das "runat=server" problemlos benutzen wenn ich keine Masterpage/Content-Element benutze.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Kann sich jemand dieses "Phänomen" erklären? Wäre für jede Hilfe dankbar.&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;BR&gt;Ja, ASP.NET kennt drei verschiedene Arten für die Identifizierung von Controls, in deinem Fall musst du &amp;lt;Control&amp;gt;.ClientID benutzen.&lt;BR&gt;Sobald ein Control bzw. ein Html Element mit runat="server" deklariert ist, werden die IDs bei Bedarf von ASP.NET automatisch generiert.&lt;/P&gt;
&lt;P&gt;Eine Erklärung dazu findest du hier: &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx"&gt;Identifizierung von Controls: Control.ID / .ClientID / .UniqueID&lt;/A&gt;&lt;/P&gt;</description></item><item><title>Identifizierung von Controls: Control.ID / .ClientID / .UniqueID - UserControlTest</title><link>http://www.aspnetzone.de/files/folders/peterbucher/entry178463.aspx</link><pubDate>Mon, 09 Apr 2007 19:49:04 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:178463</guid><dc:creator>Peter Bucher</dc:creator><description>-</description></item><item><title>Control Identifizierung Beispiel</title><link>http://www.aspnetzone.de/photos/peterbucher/images/178462/original.aspx</link><pubDate>Mon, 09 Apr 2007 19:28:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:178462</guid><dc:creator>Peter Bucher</dc:creator><description /></item><item><title>Artikel: Identifizierung von Controls: Control.ID / .ClientID / .UniqueID</title><link>http://www.aspnetzone.de/blogs/peterbucher/archive/2007/04/09/artikel-identifizierung-von-controls-control-id-clientid-uniqueid.aspx</link><pubDate>Mon, 09 Apr 2007 17:46:00 GMT</pubDate><guid isPermaLink="false">ce930855-ae9b-4fa4-8077-06a76071cc6a:178458</guid><dc:creator>Peter Bucher</dc:creator><description>&lt;P&gt;ASP.NET Controls haben 3 verschiedene Eigenschaften, anhand dessen man sie identifizieren kann.&lt;BR&gt;Na gut, man mag denken, desto mehr, desto besser :))&lt;/P&gt;
&lt;P&gt;Es kann aber auch genau auch das Gegenteil bedeuten: Verwirrung.&lt;/P&gt;
&lt;P&gt;Um die "Bösewichte" mal beim Namen zu nennen:&lt;BR&gt;&lt;STRONG&gt;Serverseitige ID&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt; &amp;lt;Control&amp;gt;.&lt;STRONG&gt;ID&lt;/STRONG&gt;&lt;BR&gt;&lt;STRONG&gt;Clientseitige ID&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&amp;gt; &amp;lt;Control&amp;gt;.&lt;STRONG&gt;ClientID&lt;/STRONG&gt;&lt;BR&gt;&lt;STRONG&gt;Clientseitiger Namen&lt;/STRONG&gt;&amp;nbsp; --&amp;gt; &amp;lt;Control&amp;gt;.&lt;STRONG&gt;UniqueID&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Ein kleiner Exkurs zu Classic ASP um mehr über die Hintergründe zu erfahren.&lt;BR&gt;In Classic ASP kann ein erweitertes HelloWorld Script so aussehen:&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;DIV class=CodeBox&gt;&lt;code&gt;&lt;span style="color: Black;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;form&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;name&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="myForm"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;method&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="post"&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;input&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;type&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="text"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;name&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="txtName"&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;input&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;type&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="submit"&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;value&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="PostBack..."&lt;/span&gt; &lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;name&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;="btnSubmit"&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: Maroon;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;form&lt;/span&gt;&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;%&lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;If&lt;/span&gt; Request.Form.&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Count&lt;/span&gt; &amp;gt; 0 &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Then&lt;/span&gt;&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;If&lt;/span&gt; Request.Form(&lt;span style="color: #666666;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"txtName"&lt;/span&gt;) &amp;lt;&amp;gt; vbNullString &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Then&lt;/span&gt;&lt;br /&gt;          Response.&lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;Write&lt;/span&gt;(&lt;span style="color: #666666;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"Hallo "&lt;/span&gt; &amp;amp; Request.Form(&lt;span style="color: #666666;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"txtName"&lt;/span&gt;) &amp;amp; &lt;span style="color: #666666;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;"!"&lt;/span&gt;)&lt;br /&gt;      &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;End&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;If&lt;/span&gt;        &lt;br /&gt;  &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;End&lt;/span&gt; &lt;span style="color: Blue;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;span style="color: Red;background-color: Transparent;font-family: Courier New;font-size: 14px;font-weight: normal;"&gt;%&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Wir deklarieren hier alles von Hand und das genau so, wie es schliesslich beim Client ankommt.&lt;BR&gt;Es wird der Name "txtName" für das Html Input Field manuell gesetzt und schliesslich auch für das anschliessende Request.Form benutzt.&lt;BR&gt;Keine Probleme und eine heile Welt also :-)&lt;/P&gt;Nun, was ist den überhaupt in ASP.NET so anders, dass wir hier drei verschiedene Eigenschaften zur Identifizierung eines Controls brauchen, werdet ihr euch wahrscheinlich fragen.&lt;BR&gt;Es ist aber tatsächlich so, dass alle drei Eigenschaften ihre Berechtigung haben, hier also im einzeln:&lt;BR&gt;&lt;BR&gt;
&lt;H2&gt;&lt;FONT color=#808080&gt;Serverseitige ID --&amp;gt; &amp;lt;Control&amp;gt;.ID&lt;/FONT&gt;&lt;/H2&gt;Die serverseitige ID wird, wie der Name schon sagt, auf dem Server benutzt.&lt;BR&gt;
&lt;P&gt;Bei deklerativen oder per Code erstellten Controls / Steuerelementen vergibt man manuell oder per Code automatisiert eine ID.&lt;BR&gt;Diese dient bei der serverseitigen Arbeit zur eindeutigen Identifizierung der Controls.&lt;/P&gt;
&lt;P&gt;Beim arbeiten mit ASP.NET benutzt man die meiste Zeit diese ID.&lt;BR&gt;Wichtig zu wissen ist dabei, dass man durch die Schachtelung von Controls oder Schachtelung von Quellcode und Definierung von Namensräumen und Aliase, die jeweiligen IDs auch mehrmals vergeben kann, ohne dass dabei serverseitig die Eindeutigkeit verloren geht.&lt;/P&gt;
&lt;P&gt;Schlussendlich wird die ganze Eindeutigkeit eben durch die Möglichkeiten auf dem Server (Schachtelung, Namensräume, Aliase) konsistent gehalten, ohne dass dabei Probleme entstehen.&lt;/P&gt;
&lt;H2&gt;&lt;BR&gt;&lt;FONT color=#808080&gt;Clientseitige ID --&amp;gt; &amp;lt;Control&amp;gt;.ClientID&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;Jetzt kommt die Kehrtwende, wir arbeiten ja nicht ausschliesslich auf dem Server, sondern wollen uns auch die Möglichkeiten auf dem Client nicht entgehen lassen.&lt;BR&gt;Auf dem Client können wir mit Javascript oder VBScript (nur Internet Explorer) weiterarbeiten, ohne auf Rücksprache mit dem Server angewiesen zu sein.&lt;BR&gt;&lt;BR&gt;Um überhaupt mit Javascript arbeiten zu können, müssen wir serverseitig den entsprechenden Code konstruieren und dem Client im Ausgabestrom zur Verfügung stellen.&lt;/P&gt;
&lt;P&gt;Jetzt sieht die Situation mit den IDs schon wieder ganz anders aus.&lt;BR&gt;Auf dem Client wird eine Html Seite (und evt. weitere Elemente) empfangen und verarbeitet. Im Gegensatz zum Server, haben wir hier keine Möglichkeiten mehr, von den oben genannten Vorteilen (Schachtelung, Namensräume, Aliase) zu profitieren.&lt;/P&gt;
&lt;P&gt;ASP.NET wirkt diesem Problem entgegen, indem es, &lt;STRONG&gt;* bei&amp;nbsp;Bedarf&lt;/STRONG&gt;,&amp;nbsp;für den Client aus den auf dem Server eindeutigen Namen / IDs, jeweils eindeutige Namen und IDs für den Client generiert.&lt;BR&gt;So haben wir auf dem Server und auf dem Client jeweils eine eindeutige Namensumgebung ohne Konflikte.&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;*&lt;/STRONG&gt; Wenn ein Control z.B.&amp;nbsp;nur an die Page selber gehängt wird, kommen keine Präfixe&amp;nbsp;in die ClientID bzw. UniqueID bzw. vor die normale ID.&lt;/P&gt;
&lt;P&gt;Wollen wir jetzt clientseitig mit Javascript weiterarbeiten, kommt serverseitig zuerst &amp;lt;Control&amp;gt;.ClientID ins Spiel, diese Eigenschaft enthält die ID, die von ASP.NET automatisch generiert und zum Client gesendet wird.&lt;BR&gt;Wir übergeben dem Javascript Code, der dann schlussendlich vom Server zum Client geschickt wird, jeweils die ClientID, die ASP.NET auch in den Html Quellcode rendert.&lt;BR&gt;So können wir per Javascript auf die jeweiligen Controls clientseitig zugreifen.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Die clientseitige ID setzt sich aus dem Container- und dem eigentlichen Namen zusammen.&lt;BR&gt;Beispielsweise ist in einem UserControl "uc1" ein Label "lblTest" enthalten, so lautet die ClientID: &lt;B&gt;uc1_lblTest&lt;/B&gt;&lt;BR&gt;&lt;/P&gt;
&lt;H2&gt;&lt;FONT color=#808080&gt;Clientseitiger Namen --&amp;gt; &amp;lt;Control&amp;gt;.UniqueID&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;Am oberen Classic ASP Beispiel sehen wir, dass für die Übermittlung von Formularen mittels POST, das Name-Attribut eines Html Input Fields zur Identifizierung benutzt wird.&lt;BR&gt;Die UniqueID ist im Grunde dasselbe wie die ClientID, nur dass man sich hier auf den Namen bzw. das Name-Attribut des Elementes bezieht und der Name anders codiert wird.&lt;BR&gt;&lt;BR&gt;Die Zusammensetzung der ID ist identisch mit dem oberen Beispiel, nur dass zur Trennung der Namen, jeweils ein Dollarzeichen benutzt wird. UniqueID wird z.B. für den Fall benutzt, wenn man per Request.Form[] manuell einen Wert abrufen möchte.&lt;BR&gt;Das Name-Attribut wird auf dem Client also wie folgt lauten: &lt;B&gt;uc1$lblTest&lt;/B&gt;&lt;BR&gt;&lt;/P&gt;
&lt;H2&gt;&lt;FONT color=#808080&gt;Beispiel und Demonstration von Problemen die auftreten könnten&lt;/FONT&gt;&lt;/H2&gt;Ich habe für euch ein Beispiel zusammengestellt, das sowohl die Nutzung von serverseitigen IDs und UniqueID demonstriert, als auch&amp;nbsp; im gleichen Atemzug auch ein mögliches Problem aufzeigt.&lt;BR&gt;&lt;BR&gt;Im Beispiel verwende ich eine normale ASPX Seite mit Codebehind so wie auch ein UserControl das im Prinzip gleich aufgebaut ist, wie die ASPX Seite.&lt;BR&gt;Die ASPX Seite bindet im unteren Bereich das UserControl ein.&lt;BR&gt;Nicht nur der deklerative Teil, sondern auch der codierte, sieht praktisch gleich aus.&lt;BR&gt;Auch die Benennung in Form von serverseitigen IDs ist zu Demonstrationszwecken völlig identisch.&lt;BR&gt;&lt;BR&gt;Das Beispiel ist im Grunde gleich aufgebaut, wie das obere Classic ASP Beispiel.&lt;BR&gt;Wir haben ein Formular, eine TextBox und ein Submit Button. Desweiteren sind auch noch ein paar Statuslabels vorhanden.&lt;BR&gt;&lt;A href="http://www.aspnetzone.de/photos/peterbucher/images/178462/original.aspx"&gt;&lt;IMG src="http://www.aspnetzone.de/photos/peterbucher/images/178462/343x480.aspx" align=right border=0&gt;&lt;/A&gt;&lt;BR&gt;Man gibt seinen Namen ein und erhält ihn dann inklusive einer Begrüssung angezeigt, im UserControl, sowie auch auf der Seite.&lt;BR&gt;Wenn man das Beispiel ausführt und bei beiden TextBoxen jeweils einen Wert eingibt, fällt gleich auf, dass bei der Ausgabe vom UserControl bei der Abfrage per Request.Form auf die &amp;lt;Control&amp;gt;.ID, den Wert vom Formular der ASPX Seite selber, angezeigt wird.&lt;BR&gt;&lt;BR&gt;Der Grund ist einfach, wir haben serverseitig in der ASPX Seite, sowohl auch im UserControl identische Bezeichner, für unserer TextBoxen (und den ganzen Rest), wenn wir jetzt also versuchen clientseitig mithilfe der &amp;lt;Control&amp;gt;.ID auf den Wert zuzugreifen, fallen wir hier in einen Namenskonflikt.&lt;BR&gt;&lt;BR&gt;Die Request.Form[] Abfrage per &amp;lt;Control&amp;gt;.ClientID bringt uns auch nicht weiter, &lt;B&gt;da bei der Übertragung per POST auf die Namen zurückgegriffen wird und nicht auf die ID!&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Hier ist &amp;lt;Control&amp;gt;.UniqueID also die Qual der Wahl, denn diese Eigenschaft liefert uns das automatisch generierte Name-Attribut des Controls.&lt;BR&gt;&lt;BR&gt;
&lt;H2&gt;&lt;FONT color=#808080&gt;Abschliessende Worte&lt;/FONT&gt;&lt;/H2&gt;
&lt;P&gt;Im Grunde benötigt man bei der Arbeit mit ASP.NET meistens nur ID oder die ClientID.&lt;BR&gt;Request.Form sowie auch Response.Write sollte und benötigt man praktisch nicht mehr.&lt;BR&gt;&lt;BR&gt;Das Modell von ASP.NET bietet hier viel komfortablere Möglichkeiten, anstelle von Response.Write() bieten sich Controls / Steuerelemente an, die man dynamisch per Inhalt füllen kann, z.B. &amp;lt;Control&amp;gt;.Text, etc..&lt;BR&gt;&lt;BR&gt;Anstelle von Request.Form[] kann man im Code einfach auf die .Text Eigenschaft der TextBoxen zugreifen.&lt;BR&gt;So wird die ganze Arbeit mit der Identifizierung der Controls von ASP.NET gehandelt und vereinfacht.&lt;BR&gt;&lt;STRONG&gt;Siehe auch:&lt;/STRONG&gt; &lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/02/04/die-alten-bekannten-response-write-und-request-form.aspx"&gt;Die alten Bekannten - Response.Write() und Request.Form[]&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Möglichkeiten um Javascript die ClientID eines Controls bekanntzumachen, finden sich auf folgender Seite:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/09/02/zwei-ans-tze-wie-mit-den-clientids-von-asp-net-umgegangen-werden-kann.aspx"&gt;Zwei Ansätze wie mit den ClientIDs von ASP.NET umgegangen werden kann&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Beispielprojekt:&lt;BR&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://www.aspnetzone.de/files/folders/178463/download.aspx"&gt;UserControlTest.zip&lt;/A&gt;&lt;BR&gt;&lt;/LI&gt;&lt;/UL&gt;MSDN Links:&lt;BR&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.control.id%28VS.80%29.aspx"&gt;System.Web.UI.Control.ID&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.control.clientid%28vs.80%29.aspx"&gt;System.Web.UI.Control.ClientID&lt;/A&gt; 
&lt;LI&gt;&lt;A href="http://msdn2.microsoft.com/de-de/library/system.web.ui.control.uniqueid%28vs.80%29.aspx"&gt;System.Web.UI.Control.UniqueID&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Dank geht an &lt;A href="http://blog.veloursnebel.de/"&gt;Kai Gloth&lt;/A&gt; für die Idee zum Artikel, sowie den Hinweis zu &amp;lt;Control&amp;gt;.UniqueID im Bezug auf Request.Form[]&lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;Bearbeitung / Korrekturen&lt;/STRONG&gt;:&lt;BR&gt;23.05.07 - Hinweis zum generieren bzw. nichtgenerieren&amp;nbsp;der&amp;nbsp;IDs hinzugefügt&lt;BR&gt;28.11.07 - Link zum Codeclip von Daniel Walzenbach hinzugefügt&lt;BR&gt;17.03.08 - Link zu "&lt;A href="http://www.aspnetzone.de/blogs/peterbucher/archive/2008/02/04/die-alten-bekannten-response-write-und-request-form.aspx"&gt;Die alten Bekannten - Response.Write() und Request.Form[]&lt;/A&gt;" hinzugefügt&lt;/P&gt;</description></item></channel></rss>