<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>ASP.Net</title>
        <link>http://geekswithblogs.net/jonasb/category/4311.aspx</link>
        <description>Posts specific to ASP.Net.</description>
        <language>en-US</language>
        <copyright>Jonas Bush</copyright>
        <managingEditor>jonasbush@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>Triggering a validator through javscript</title>
            <link>http://geekswithblogs.net/jonasb/archive/2007/01/29/104893.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In &lt;A href="http://geekswithblogs.net/jonasb/archive/2006/08/11/87708.aspx"&gt;this&lt;/A&gt;&amp;nbsp;post, I talked about enabling or disabling a validator client-side. Someone had commented asking how to change the status of a control from valid to invalid. The following javascript works at least for required field validators, I haven't tested it with anything else (but I imagine it should work just fine). Again, this is 2.0, I haven't tested this in 1.1:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;var myValidator = document.getElementById('&amp;lt;%=reqField.ClientID%&amp;gt;');&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;ValidatorValidate(myValidator);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;For a required field validator at least, the causes the same actions as clicking on a button on the page.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Hope this helps!&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104893"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=104893" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jonasb/aggbug/104893.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jonas Bush</dc:creator>
            <guid>http://geekswithblogs.net/jonasb/archive/2007/01/29/104893.aspx</guid>
            <pubDate>Mon, 29 Jan 2007 22:45:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jonasb/comments/104893.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jonasb/archive/2007/01/29/104893.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jonasb/comments/commentRss/104893.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jonasb/services/trackbacks/104893.aspx</trackback:ping>
        </item>
        <item>
            <title>Using Atlas to act as a check on javascript calls</title>
            <link>http://geekswithblogs.net/jonasb/archive/2006/08/16/88185.aspx</link>
            <description>&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;One of the things I've been working on is how to use Atlas web services to verify actions on the server. So the client requests to perform a particular action on the server, and if they don't have access to perform that action or the action fails (because a database is down, or something along those lines), I don't want the method on the client to continue executing.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;The problem with that is that Atlas web service calls are asynchronous by nature (explained &lt;A href="http://weblogs.asp.net/bleroy/archive/2005/12/01/432031.aspx"&gt;here&lt;/A&gt; and &lt;A href="http://weblogs.asp.net/bleroy/archive/2005/12/15/433278.aspx"&gt;here&lt;/A&gt;). So I can't say something like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;if(myService.myServiceCall() == true)&lt;BR&gt;{&lt;BR&gt;  //do stuff&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;What I've come up with is this javascript object:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;function&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; webServiceRunner(webServiceFunction, returnFunction, returnParams)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; _returnFunction = returnFunction;&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; _returnParams = returnParams;&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; _webServiceFunction = webServiceFunction;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;BR&gt;  this&lt;/FONT&gt;&lt;FONT size=2&gt;.runService = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;function&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;()&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;    &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;_webServiceFunction(onServiceComplete);&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;  function&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; onServiceComplete(result)&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;FONT size=2&gt; r = &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'_returnFunction('&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;for&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; i = 0; i &lt; _returnParams.length; i++)&lt;BR&gt;    &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;      &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;r += &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#ff0000 size=2&gt;'_returnParams['&lt;/FONT&gt;&lt;FONT size=2&gt; + i.toString() + &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;']'&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;      &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;(i &lt; returnParams.length - 1)&lt;BR&gt;        &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;r += &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#ff0000 size=2&gt;','&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;}&lt;BR&gt;    &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;r += &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#ff0000 size=2&gt;', result);'&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT face="Courier New"&gt;//alert(r);&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;eval(r);&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;This takes advantage of some of the nice (and dangerous) features of Javascript, the &lt;FONT face="Courier New"&gt;eval()&lt;/FONT&gt; statement, the &lt;FONT face="Courier New"&gt;arguments&lt;/FONT&gt; object, and function pointers. &lt;FONT face="Courier New"&gt;Eval()&lt;/FONT&gt; will let you create a string, like &lt;FONT face="Courier New"&gt;var s = 'alert(&amp;#8220;hi&amp;#8220;);';&lt;/FONT&gt; - and then call &lt;FONT face="Courier New"&gt;eval(s);&lt;/FONT&gt; - the end result of which will be &amp;#8220;Hi&amp;#8220; showing up in an alert box. The &lt;FONT face="Courier New"&gt;arguments&lt;/FONT&gt; object is created automatically for you in javascript inside of any function, and contains an array of all the arguments passed into that function.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;So now I can instantiate and call this class like so:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;span&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;class&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="CommandLink"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;onclick&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="testOne(this);"&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;Test&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;span&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;function&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; testOne(sender, result)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;(result == undefined)&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;var&lt;/FONT&gt;&lt;FONT size=2&gt; sr = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; webServiceRunner(TestWebService.HasAccess, testOne, arguments);&lt;BR&gt;    &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;sr.runService();&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;BR&gt;&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;if&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;(result)&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;else&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;    &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;alert(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#ff0000 size=2&gt;'sorry, you are unable to perform that action'&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;);&lt;BR&gt;  &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Assuming I have a webservice defined, as well as the proper Atlas script manager setup: &lt;/FONT&gt;&lt;/P&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;atlas&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;scriptmanager&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="scriptManager"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;runat&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="server"&gt;&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;services&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&gt;&lt;BR&gt;    &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;atlas&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;servicereference&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;path&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="TestWebService.asmx"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;/&gt;&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;services&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;atlas&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;scriptmanager&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;[&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#008080 size=2&gt;WebMethod&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;bool&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; HasAccess()&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;return&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;false&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;What ends up happening inside the webServiceRunner is that the following string will be created:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;_returnFunction(_returnParams[0], result);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Then that string is eval-ed, and my original testOne function is called, with the original sender object (from the original click), and the result parameter from the web service.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;If this is confusing, post a comment or send me an email and I'll try and elaborate further. If you think this is silly or useless, leave a comment and explain why. :)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt; &lt;/P&gt;&lt;/FONT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=88185"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=88185" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jonasb/aggbug/88185.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jonas Bush</dc:creator>
            <guid>http://geekswithblogs.net/jonasb/archive/2006/08/16/88185.aspx</guid>
            <pubDate>Wed, 16 Aug 2006 21:48:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jonasb/comments/88185.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jonasb/archive/2006/08/16/88185.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jonasb/comments/commentRss/88185.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jonasb/services/trackbacks/88185.aspx</trackback:ping>
        </item>
        <item>
            <title>Disabling an ASP.Net Validator through Javascript</title>
            <link>http://geekswithblogs.net/jonasb/archive/2006/08/11/87708.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;If you ever find yourself needing to selectively disable an asp.net validator through javascript, you can do the following (in 2.0, not sure if this exists in 1.x):&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;function doSomething()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; var myVal = document.getElementById('myValidatorClientID');&lt;BR&gt;&amp;nbsp; ValidatorEnable(myVal, false);&amp;nbsp; &lt;/FONT&gt;&lt;FONT size=2&gt;&lt;BR&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Quick and easy! Sadly, not as easy to find through Google, so hopefully this post will help that. :)&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=87708"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=87708" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jonasb/aggbug/87708.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jonas Bush</dc:creator>
            <guid>http://geekswithblogs.net/jonasb/archive/2006/08/11/87708.aspx</guid>
            <pubDate>Fri, 11 Aug 2006 15:57:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jonasb/comments/87708.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jonasb/archive/2006/08/11/87708.aspx#feedback</comments>
            <slash:comments>55</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jonasb/comments/commentRss/87708.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jonasb/services/trackbacks/87708.aspx</trackback:ping>
        </item>
        <item>
            <title>Enabling/disabling asp.net checkboxes through javascript</title>
            <link>http://geekswithblogs.net/jonasb/archive/2006/07/27/86498.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The problem:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;You want to have a web form with multiple checkboxes, and have some of them be enabled or disabled depending on whether a certain checkbox is checked (or radio button selected, or what have you).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;At first glance, this seems fairly simple; you can just do:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;%=myCheckBox.ClientID%&amp;gt;.disabled = false;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;in javascript.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The problem comes when you, on the server side, disable the checkbox by default. (NB: this pertains to ASP.Net 2.0, it may work differently in 1.x). The problem is that an &lt;FONT face="Courier New"&gt;&amp;lt;asp:checkbox /&amp;gt;&lt;/FONT&gt; control gets rendered out like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;span&amp;gt;&amp;lt;input type='checkbox'&amp;gt;&amp;lt;/span&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;The &lt;U&gt;real&lt;/U&gt; problem comes when you have a checkbox like this: &lt;FONT face="Courier New"&gt;&amp;lt;asp:checkbox enabled=&amp;#8221;false&amp;#8221; /&amp;gt;&lt;/FONT&gt;. This gets rendered out like this:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;span disabled='disabled'&amp;gt;&amp;lt;input type='checkbox' disabled='disabled'&amp;gt;&amp;lt;/span&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Can you see the problem? In our javascript, when we enable the input, we're not enabling the surrounding span. As it happens, in FireFox, this doesn't seem to be an issue (the checkbox will be enabled as you would expect). In IE6, however, the checkbox will be disabled because the surrounding span is disabled.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;To get around this, you can do the following instead of saying &lt;FONT face="Courier New"&gt;myCheckBox.Enabled = false&lt;/FONT&gt; in your code-behind:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;myCheckBox.InputAttributes.Add(&amp;#8221;disabled&amp;#8221;, &amp;#8220;disabled&amp;#8221;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;(There's also a &amp;#8220;&lt;FONT face="Courier New"&gt;LabelAttributes&lt;/FONT&gt;&amp;#8221; property of the checkbox, if your control has text that you want to give attributes to explicitly).&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Hope this helps!&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=86498"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=86498" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jonasb/aggbug/86498.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jonas Bush</dc:creator>
            <guid>http://geekswithblogs.net/jonasb/archive/2006/07/27/86498.aspx</guid>
            <pubDate>Fri, 28 Jul 2006 05:10:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jonasb/comments/86498.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jonasb/archive/2006/07/27/86498.aspx#feedback</comments>
            <slash:comments>46</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jonasb/comments/commentRss/86498.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jonasb/services/trackbacks/86498.aspx</trackback:ping>
        </item>
        <item>
            <title>Less than useful helpfiles, part 1</title>
            <link>http://geekswithblogs.net/jonasb/archive/2006/05/09/77734.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In the helps for HtmlInputControl.Name (for .NET 2.0):&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;Gets or sets the unique identifier name for the &lt;/FONT&gt;&lt;A href="ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref14/html/T_System_Web_UI_HtmlControls_HtmlInputControl.htm"&gt;&lt;FONT face="Courier New" size=2&gt;HtmlInputControl&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face="Courier New" size=2&gt; control. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Later on, in that same help file:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;In this implementation, the &lt;B&gt;get&lt;/B&gt; accessor returns the value of the &lt;B&gt;Control.UniqueID&lt;/B&gt; property. However, the &lt;B&gt;set&lt;/B&gt; accessor does not assign a value to this property.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;So then why say that it sets the property, if it doesn't actually set the property?&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77734"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77734" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jonasb/aggbug/77734.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jonas Bush</dc:creator>
            <guid>http://geekswithblogs.net/jonasb/archive/2006/05/09/77734.aspx</guid>
            <pubDate>Tue, 09 May 2006 20:37:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jonasb/comments/77734.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jonasb/archive/2006/05/09/77734.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jonasb/comments/commentRss/77734.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jonasb/services/trackbacks/77734.aspx</trackback:ping>
        </item>
        <item>
            <title>Repeaters, Checkboxes and UpdatePanels, Oh My!</title>
            <link>http://geekswithblogs.net/jonasb/archive/2006/05/08/77624.aspx</link>
            <description>&lt;P&gt;&lt;FONT face=Verdana size=2&gt;I was working on some sample stuff that I'll be posting later and ran into a problem. I had 2 different update panels; inside one was just a div, inside the other one was a repeater. Inside the repeater I had a bunch of checkboxes, and when I checked/unchecked them, I needed the first update panel to be updated. This posed a couple of problems:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;A checkbox doesn't have a CommandName property, and can't be used to trigger a Repeater's ItemCommand event&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;This I got around by declaring the event handler for the checkbox in the markup: &lt;FONT face="Courier New"&gt;OnCheckedChanged=&amp;#8221;myCB_OnCheckedChanged&amp;#8221;&lt;/FONT&gt;, and in the event handler I can cast the sender argument to a checkbox. The other problem:&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face=Verdana size=2&gt;An UpdatePanel's list of triggers can't include a control that's inside a template&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Which means I can't say &lt;FONT face="Courier New"&gt;&amp;lt;atlas:ControlEventTrigger ControlID=&amp;#8221;myCB&amp;#8221; EventName=&amp;#8221;myCB_OnCheckedChanged&amp;#8221; /&amp;gt;&lt;/FONT&gt;, since myCB doesn't actually exist at runtime. Instead, in myCB_OnCheckedChanged, I can just say: &lt;FONT face="Courier New"&gt;updatePanel1.Update();&lt;/FONT&gt; and everything works fine.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Hope this helps...&lt;/FONT&gt;&lt;/P&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77624"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=77624" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jonasb/aggbug/77624.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jonas Bush</dc:creator>
            <guid>http://geekswithblogs.net/jonasb/archive/2006/05/08/77624.aspx</guid>
            <pubDate>Mon, 08 May 2006 21:08:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jonasb/comments/77624.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jonasb/archive/2006/05/08/77624.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/jonasb/comments/commentRss/77624.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jonasb/services/trackbacks/77624.aspx</trackback:ping>
        </item>
        <item>
            <title>Custom Server Controls in 2.0</title>
            <link>http://geekswithblogs.net/jonasb/archive/2006/04/06/74504.aspx</link>
            <description>&lt;DIV class=ForumPostContentText id=_ctl0__ctl1_bcr__ctl0___PostRepeater__ctl7_PostViewWrapper&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;Ahh the joys of learning new tech. :) &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;In 2.0, if you have a custom server control in your app_code directory, it &lt;STRONG&gt;must&lt;/STRONG&gt; have a namespace, and the register directive in&amp;nbsp;a page that uses that control&amp;nbsp;should look like this:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;%&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;@&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;register&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;namespace&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="TestWebControls"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;tagprefix&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="testControl"&lt;/FONT&gt;&lt;FONT size=2&gt; %&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;%&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;@&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;register&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;namespace&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="TestWebControls"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;tagprefix&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="testControl"&lt;/FONT&gt;&lt;FONT size=2&gt; %&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana size=2&gt;And this would be the code in your App_Code folder:&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;namespace&lt;/FONT&gt;&lt;FONT size=2&gt; TestWebControls&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; [&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;ParseChildren&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;false&lt;/FONT&gt;&lt;FONT size=2&gt;)]&lt;BR&gt;&amp;nbsp; [&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;PersistChildren&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;true&lt;/FONT&gt;&lt;FONT size=2&gt;)]&lt;BR&gt;&amp;nbsp; [&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;ToolboxData&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"&amp;lt;{0}:TestControl runat=\"server\""&lt;/FONT&gt;&lt;FONT size=2&gt;)]&lt;BR&gt;&amp;nbsp; [&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;AspNetHostingPermission&lt;/FONT&gt;&lt;FONT size=2&gt;(System.Security.Permissions.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;SecurityAction&lt;/FONT&gt;&lt;FONT size=2&gt;.Demand, Level = &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;AspNetHostingPermissionLevel&lt;/FONT&gt;&lt;FONT size=2&gt;.Minimal)]&lt;BR&gt;[&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;AspNetHostingPermission&lt;/FONT&gt;&lt;FONT size=2&gt;(System.Security.Permissions.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;SecurityAction&lt;/FONT&gt;&lt;FONT size=2&gt;.InheritanceDemand, Level = &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;AspNetHostingPermissionLevel&lt;/FONT&gt;&lt;FONT size=2&gt;.Minimal)]&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;TestServerControl&lt;/FONT&gt;&lt;FONT size=2&gt; : System.Web.UI.WebControls.&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;WebControl&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp; &amp;nbsp; public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; RenderBeginTag(&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;HtmlTextWriter&lt;/FONT&gt;&lt;FONT size=2&gt; writer)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;/FONT&gt;&lt;FONT size=2&gt;.AddAttributesToRender(writer);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.RenderBeginTag(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"div"&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; RenderEndTag(&lt;/FONT&gt;&lt;FONT color=#008080 size=2&gt;HtmlTextWriter&lt;/FONT&gt;&lt;FONT size=2&gt; writer)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer.RenderEndTag();&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;Then in your markup, you would have:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;testControl&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;TestServerControl&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;cssclass&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="Foo"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="foo1"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;runat&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;="server"&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;inside&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/&lt; FONT&gt;&lt;FONT color=#800000 size=2&gt;testControl&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;:&lt;/FONT&gt;&lt;FONT color=#800000 size=2&gt;TestServerControl&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face=Verdana color=#000000&gt;the "TestServerControl" name must match the name of the class of your custom server control (which I overlooked...whoops). You can also register the control in your web.config for ease of use in multiple pages:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face=Verdana color=#000000&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;system.web&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;pages&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;controls&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;add&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;namespace&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;TestWebControls&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;tagPrefix&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;testControl&lt;/FONT&gt;&lt;FONT size=2&gt;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt; /&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/&lt; FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" color=#800000 size=2&gt;controls&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/&lt; FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#800000 size=2&gt;pages&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&amp;gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;/&lt;FONT face="Courier New" color="#800000" size="2"&gt;&lt;/&lt;FONT color="#800000"&gt;system.web&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&lt;FONT face=Verdana color=#000000&gt;Since this control is only going to be used in this app, I don't need to put it in a separate dll. But if you do put it in a separate dll, all you need to add is the "assembly" attribute when registering your controls. Note that you can't add the control to your toolbox unless it's compiled into a separate dll.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT face="Courier New"&gt;&lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=74504"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=74504" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/jonasb/aggbug/74504.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jonas Bush</dc:creator>
            <guid>http://geekswithblogs.net/jonasb/archive/2006/04/06/74504.aspx</guid>
            <pubDate>Thu, 06 Apr 2006 15:29:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/jonasb/comments/74504.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/jonasb/archive/2006/04/06/74504.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/jonasb/comments/commentRss/74504.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/jonasb/services/trackbacks/74504.aspx</trackback:ping>
        </item>
    </channel>
</rss>