<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nerdboy.co.uk</title>
	<atom:link href="http://www.nerdboy.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nerdboy.co.uk</link>
	<description>nerdboy blog - web development stuff</description>
	<lastBuildDate>Thu, 03 Jun 2010 10:17:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>maxlength for a multiline textbox</title>
		<link>http://www.nerdboy.co.uk/2010/03/maxlength-for-a-multiline-textbox/</link>
		<comments>http://www.nerdboy.co.uk/2010/03/maxlength-for-a-multiline-textbox/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 16:41:31 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=140</guid>
		<description><![CDATA[In asp.net you can set the attribute maxlength which works fine if the textmode is SingleLine, but if you set the textmode to MultiLine then maxlength no longer works. This is because the html that is rendered is a textarea instead on a regular input field. Customvalidator to the rescue! For example: &#60;asp:TextBox runat=&#34;server&#34; ID=&#34;txtIntro&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>In asp.net you can set the attribute maxlength which works fine if the textmode is SingleLine, but if you set the textmode to MultiLine then maxlength no longer works.</p>
<p>This is because the html that is rendered is a textarea instead on a regular input field.</p>
<p>Customvalidator to the rescue!</p>
<p>For example:</p>
<pre class="brush: xml;">
 &lt;asp:TextBox runat=&quot;server&quot; ID=&quot;txtIntro&quot; TextMode=&quot;MultiLine&quot; Rows=&quot;3&quot; /&gt;
 &lt;asp:CustomValidator runat=&quot;server&quot; ID=&quot;cvIntro&quot; maxlength=&quot;255&quot;
	ErrorMessage=&quot;Please enter 255 characters or less&quot;
	ControlToValidate=&quot;txtIntro&quot;
	ClientValidationFunction=&quot;checkTextAreaLength&quot; /&gt;
</pre>
<p></p>
<p>
This &#8220;fires&#8221; this clientside function:
</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
    function checkTextAreaLength(source, arguments) {
        var maxlength = $(source).attr(&quot;maxlength&quot;);
        if (maxlength == undefined) maxlength = 255;
        if (arguments.Value.length &gt; maxlength)
            arguments.IsValid = false;
        else
            arguments.IsValid = true;
    }

&lt;/script&gt;
</pre>
<p></p>
<p>One thing to note is that I&#8217;ve had to add the maxlength attribute to the customvalidator <strong>not </strong>to the textbox.  I would prefer to have maxlength set on the textbox but so far I&#8217;ve been unable to work this out.  If anyone has any ideas please let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2010/03/maxlength-for-a-multiline-textbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting a labels &quot;for&quot; attribute inside a repeater</title>
		<link>http://www.nerdboy.co.uk/2009/11/setting-a-labels-for-attribute-inside-a-repeater/</link>
		<comments>http://www.nerdboy.co.uk/2009/11/setting-a-labels-for-attribute-inside-a-repeater/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 20:08:48 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=138</guid>
		<description><![CDATA[It&#8217;s nice to add &#60;labels&#62; to your form fields and set the labels &#8220;for&#8221; attribute so that it references the field it is a label for. e.g. &#60;label for=&#34;emailaddress&#34;&#62;Email&#60;/label&#62; &#60;input type=&#34;text&#34; id=&#34;emailaddress&#34;/&#62; Now if you&#8217;re referencing asp.net controls you can use the clientid property. e.g. &#60;label for=&#34;&#60;%= emailaddress.clientid()%&#62;&#34;&#62;Email&#60;/label&#62; &#60;asp:TextBox runat=&#34;server&#34; ID=&#34;emailaddress&#34; /&#62; All nice an [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s nice to add &lt;labels&gt; to your form fields and set the labels &#8220;for&#8221; attribute so that it references the field it is a label for.</p>
<p>e.g.</p>
<pre class="brush: xml;">&lt;label for=&quot;emailaddress&quot;&gt;Email&lt;/label&gt;
&lt;input type=&quot;text&quot; id=&quot;emailaddress&quot;/&gt;</pre>
<p>Now if you&#8217;re referencing asp.net controls you can use the clientid property.</p>
<p>e.g.</p>
<pre class="brush: xml;">
&lt;label for=&quot;&lt;%= emailaddress.clientid()%&gt;&quot;&gt;Email&lt;/label&gt;
&lt;asp:TextBox runat=&quot;server&quot; ID=&quot;emailaddress&quot; /&gt;
</pre>
<p>All nice an easy so far.  The situation gets a little bit more complicated when you start nesting this inside a repeater.</p>
<p>e.g.</p>
<pre class="brush: xml;">
&lt;asp:Repeater runat=&quot;server&quot; ID=&quot;rpt1&quot;&gt;
&lt;itemTemplate&gt;

&lt;label for=&quot;&lt;%= emailaddress.clientid()%&gt;&quot;&gt;Email&lt;/label&gt;
&lt;asp:TextBox runat=&quot;server&quot; ID=&quot;emailaddress&quot; /&gt;

&lt;/itemTemplate&gt;
&lt;/asp:Repeater&gt;
</pre>
<p>this won&#8217;t work.<br />
Here&#8217;s what you need to do instead.</p>
<pre class="brush: xml;">
&lt;asp:Repeater runat=&quot;server&quot; ID=&quot;rpt1&quot;&gt;
&lt;itemTemplate&gt;

&lt;label for=&quot;&lt;%# container.findcontrol(&quot;emailaddress&quot;).clientid()%&gt;&quot;&gt;Email&lt;/label&gt;
&lt;asp:TextBox runat=&quot;server&quot; ID=&quot;emailaddress&quot; /&gt;

&lt;/itemTemplate&gt;
&lt;/asp:Repeater&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/11/setting-a-labels-for-attribute-inside-a-repeater/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySql and the Art of Sql</title>
		<link>http://www.nerdboy.co.uk/2009/07/mysql-and-the-art-of-sql/</link>
		<comments>http://www.nerdboy.co.uk/2009/07/mysql-and-the-art-of-sql/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 09:48:15 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[MySql]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=122</guid>
		<description><![CDATA[I&#8217;ve been reading the The Art of SQL and it makes some very sensible suggestions regarding query performance. Here&#8217;s somewhere I&#8217;ve implemented 1 of the techniques. The task: return records for this month. Usually I&#8217;d write something like select * from results where month(dateadded) = month(now()) and year(dateadded) = year(now()) The problem with this is that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been reading the <a href="http://www.amazon.co.uk/gp/product/0596008945?ie=UTF8&amp;tag=classicwarfil-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=0596008945">The Art of SQL</a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.co.uk/e/ir?t=classicwarfil-21&amp;l=as2&amp;o=2&amp;a=0596008945" border="0" alt="" width="1" height="1" /> and it makes some very sensible suggestions regarding query performance.</p>
<p>Here&#8217;s somewhere I&#8217;ve implemented 1 of the techniques.</p>
<p>The task: return records for this month.</p>
<p>Usually I&#8217;d write something like</p>
<pre class="brush: sql;">select * from results where month(dateadded) = month(now()) and year(dateadded) = year(now())</pre>
<p>The problem with this is that 2 functions (month() and year()) need to be applied to every row to filter the results, this obviously requires overhead.  Also we&#8217;re missing out on any indexes that might be on the dateadded field.</p>
<p>A better approach is to use</p>
<pre class="brush: sql;">select * from results where dateadded &gt;= DATE_FORMAT(now() ,'%Y-%m-01')</pre>
<p>With this approach 1 function is run to find the first day of the month, and if the dateadded field is indexed we&#8217;ll benefit from this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/07/mysql-and-the-art-of-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Import csv data into MySql</title>
		<link>http://www.nerdboy.co.uk/2009/05/import-csv-data-into-mysql/</link>
		<comments>http://www.nerdboy.co.uk/2009/05/import-csv-data-into-mysql/#comments</comments>
		<pubDate>Fri, 08 May 2009 19:16:09 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[MySql]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=111</guid>
		<description><![CDATA[Unusually for an asp.net developer, MySql is my database platform of choice &#8211; very quick and less server intensive that certain other database platforms I could mention&#8230; Anyway here&#8217;s how I go about loading csv data into MySql Prepare your data in a program such as excel or open office Save as comma delimied or [...]]]></description>
			<content:encoded><![CDATA[<p>Unusually for an asp.net developer, MySql is my database platform of choice &#8211; very quick and less server intensive that certain other database platforms I could mention&#8230;</p>
<p>Anyway here&#8217;s how I go about loading csv data into MySql</p>
<ul>
<li>Prepare your data in a program such as excel or open office</li>
<li>Save as comma delimied or tab delimited in the file system where mysql stores the data, e.g. if the data is to go in a database called &#8220;test&#8221; then save the csv in C:\Program Files\MySQL\MySQL Server 5.0\data\test</li>
<li>Create a temporary import table whose structure matches the file to import</li>
<li>Make each field a varchar(255) even if the field contains numbers, we can always remove rogue data later &#8211; let&#8217;s just get it into the database first!</li>
<li>Load in the data (note: this is ignoring the first line as it contains the column headers and is set for a tab delimited file)</li>
</ul>
<pre class="brush: sql;">LOAD DATA INFILE 'myimport.txt' INTO TABLE test.tempimporttable

FIELDS TERMINATED BY '\t'

LINES TERMINATED BY '\r\n'

IGNORE 1 LINES</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/05/import-csv-data-into-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery and asp.net validation controls</title>
		<link>http://www.nerdboy.co.uk/2009/04/jquery-and-aspnet-validation-controls/</link>
		<comments>http://www.nerdboy.co.uk/2009/04/jquery-and-aspnet-validation-controls/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 06:08:51 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=101</guid>
		<description><![CDATA[Just found a  nice tip to check with jQuery if all built-in asp.net validation controls on a form are valid. As an asp.net developer and jQuery advocate I know I&#8217;m going to find this tip very useful http://devoma.com/post/JQuery-and-ASPNET-validators.aspx]]></description>
			<content:encoded><![CDATA[<p>Just found a  nice tip to check with jQuery if all built-in asp.net validation controls on a form are valid.</p>
<p>As an asp.net developer and jQuery advocate I know I&#8217;m going to find this tip very useful</p>
<p><a href="http://devoma.com/post/JQuery-and-ASPNET-validators.aspx">http://devoma.com/post/JQuery-and-ASPNET-validators.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/04/jquery-and-aspnet-validation-controls/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Case insensitive xpath queries</title>
		<link>http://www.nerdboy.co.uk/2009/04/case-insensitive-xpath-queries/</link>
		<comments>http://www.nerdboy.co.uk/2009/04/case-insensitive-xpath-queries/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 10:43:30 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=90</guid>
		<description><![CDATA[I had an xpath query to test whether a node already exists in an xml document Dim KeyphraseNode As XmlNode = xmlDoc.SelectSingleNode( _ String.Format(&#34;/websites/website[@url='{0}']/keyphrases/keyphrase[@value='{1}' and @type='{2}']&#34; , _ WebsiteUrl, keyphrase.ToLower, keyphraseType)) Unfortunately users were testing for values with different capitalisations so the program was reporting that the nodes didn&#8217;t exist when actually they did. I [...]]]></description>
			<content:encoded><![CDATA[<p>I had an xpath query to test whether a node already exists in an xml document</p>
<pre class="brush: vb;">Dim KeyphraseNode As XmlNode = xmlDoc.SelectSingleNode( _

String.Format(&quot;/websites/website[@url='{0}']/keyphrases/keyphrase[@value='{1}' and @type='{2}']&quot; , _

WebsiteUrl, keyphrase.ToLower, keyphraseType))</pre>
<p>Unfortunately users were testing for values with different capitalisations so the program was reporting that the nodes didn&#8217;t exist when actually they did.</p>
<p>I could have change the data in the xml file so that all data was stored as lowercase, but that would be nasty.</p>
<p>After a bit of digging round and consulting my trusty xpath book I found that there isn&#8217;t a nice and easy lowercase function built into xpath.  And the best approach is to use the translate function.  So the solution turned out to be</p>
<pre class="brush: vb;">Dim KeyphraseNode As XmlNode = xmlDoc.SelectSingleNode( _

String.Format(&quot;/websites/website[@url='{0}']/keyphrases/keyphrase[translate(@value,

'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')='{1}' and @type='{2}']&quot;, _

WebsiteUrl, keyphrase.ToLower, keyphraseType))</pre>
<p>Hope that helps if anyone else needs to do a case insensitive xpath search.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/04/case-insensitive-xpath-queries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>asp.net viewstate and seo</title>
		<link>http://www.nerdboy.co.uk/2009/03/aspnet-viewstate-and-seo/</link>
		<comments>http://www.nerdboy.co.uk/2009/03/aspnet-viewstate-and-seo/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 10:18:50 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=80</guid>
		<description><![CDATA[asp.net viewstate is a wonderful invention, but can bloat your html.  For most users this is probably going to have minimal impact on the page load time.  But for search engines spiders you really want to minimise needless information, especially near the top of the page. It&#8217;s best practice to turn off viewstate for the [...]]]></description>
			<content:encoded><![CDATA[<p>asp.net viewstate is a wonderful invention, but can bloat your html.  For most users this is probably going to have minimal impact on the page load time.  But for search engines spiders you really want to minimise needless information, especially near the top of the page.</p>
<p>It&#8217;s best practice to turn off viewstate for the whole page or for individual usercontrols if they don&#8217;t require viewstate.  The deciding factor here is: does the page or usercontrol perform postbacks.</p>
<p>Even with careful pruning of viewstate you&#8217;ll probably find your viewstate is still large&#8230;</p>
<p><strong>What you can do</strong></p>
<p>Now there are a couple of strategies I&#8217;ve seen for working round this, both involve overriding the page</p>
<p>1 is to intercept the page rendering and move the viewstate hidden variable to the bottom of the page.</p>
<p>Here&#8217;s an example <a href="http://www.dotnetdiary.com/labels/Moving%20ViewState%20Field.html">http://www.dotnetdiary.com/labels/Moving%20ViewState%20Field.html</a></p>
<p>2 is a very clever solution that keeps the viewstate information on the server and justs passes a key back and forth to the client.</p>
<p>I read about this approach here <a href="http://www.eggheadcafe.com/articles/20040613.asp">http://www.eggheadcafe.com/articles/20040613.asp</a></p>
<p><strong>Here&#8217;s my approach</strong></p>
<p>Now since I don&#8217;t think that viewstate bloat has too much of an impact on page performance for real users I&#8217;m only going to worry about search engine spiders.</p>
<p>asp.net has a way of detecting spiders &#8211; now I&#8217;m not saying it&#8217;s going to be 100% accurate but in my tests it&#8217;s been accurate enough for this technique.</p>
<p>In the page load of your page (or master page)</p>
<pre class="brush: vb;">If Request.Browser.Crawler Then Page.EnableViewState = False</pre>
<p>er that&#8217;s it, pretty simply eh? <img src='http://www.nerdboy.co.uk/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>You can verify if this is working by viewing the source of the cached version of the page that google holds.</p>
<p>Hope that helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/03/aspnet-viewstate-and-seo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET Event Validation and “Invalid Callback Or Postback Argument”</title>
		<link>http://www.nerdboy.co.uk/2009/02/aspnet-event-validation-and-%e2%80%9cinvalid-callback-or-postback-argument%e2%80%9d/</link>
		<comments>http://www.nerdboy.co.uk/2009/02/aspnet-event-validation-and-%e2%80%9cinvalid-callback-or-postback-argument%e2%80%9d/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 21:15:05 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=59</guid>
		<description><![CDATA[I was getting this and pulling my hair out. My button (server-side) was pumping out a bit of javascript  Page.ClientScript.RegisterStartupScript(GetType(String),          &#34;loginunsuccessful&#34;, &#34;&#60;script type=&#34;&#34;text/javascript&#34;&#34;&#62;          alert('Login unsuccessful – please try again');&#60;/script&#62;&#34;) And this kept causing the error. I tried using the prescribed fix: ClientScript.RegisterForEventValidation(mycontrol.uniqueid) in the prerender.  Still got the error. Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I was getting this and pulling my hair out.</p>
<p>My button (server-side) was pumping out a bit of javascript </p>
<pre class="brush: vb;">Page.ClientScript.RegisterStartupScript(GetType(String),
         &quot;loginunsuccessful&quot;, &quot;&lt;script type=&quot;&quot;text/javascript&quot;&quot;&gt;
         alert('Login unsuccessful – please try again');&lt;/script&gt;&quot;)</pre>
<p>And this kept causing the error.</p>
<p>I tried using the prescribed fix: ClientScript.RegisterForEventValidation(mycontrol.uniqueid) in the prerender.  Still got the error.</p>
<p><strong>Here&#8217;s how I fixed it.</strong>  RegisterStartupScript does the job of running at startup by emiting the js right at the foot of the page.  I wrapped my JS in jQuery&#8217;s own onload code.</p>
<pre class="brush: vb;">Page.ClientScript. RegisterStartupScript(GetType(String),
          &quot;loginunsuccessful&quot;, &quot;&lt;script type=&quot;&quot;text/javascript&quot;&quot;&gt;
          $(document).ready(function(){alert('Login unsuccessful – please try again');});
          &lt;/script&gt;&quot;)</pre>
<p>Still the same error, I then changed to using Page.ClientScript.RegisterClientScriptBlock, which emits the JS in the midst of the html and hey presto no errors.  This is without using the RegisterForEventValidation I&#8217;d like to add.</p>
<p>Final code:</p>
<pre class="brush: vb;">Page.ClientScript.RegisterClientScriptBlock(GetType(String),
          &quot;loginunsuccessful&quot;, &quot;&lt;script type=&quot;&quot;text/javascript&quot;&quot;&gt;
          $(document).ready(function(){BlockAlert('Login unsuccessful – please try again');});
          &lt;/script&gt;&quot;)</pre>
<p>Simple to fix when you know how.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/02/aspnet-event-validation-and-%e2%80%9cinvalid-callback-or-postback-argument%e2%80%9d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use jQuery to replace &lt;body onunload=&quot;GUnload()&quot;&gt;</title>
		<link>http://www.nerdboy.co.uk/2009/01/use-jquery-to-replace-body-onunload/</link>
		<comments>http://www.nerdboy.co.uk/2009/01/use-jquery-to-replace-body-onunload/#comments</comments>
		<pubDate>Mon, 26 Jan 2009 16:03:26 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=54</guid>
		<description><![CDATA[When using Google maps it&#8217;s important to use GUnload on the page&#8217;s unload event. Fine when you can access the body tag directly&#8230;. But if you have the Google map functionality wrapped inside an ascx you need a different approach. After a big of digging I found how to use jQuery to &#8220;catch&#8221; the unload [...]]]></description>
			<content:encoded><![CDATA[<p>When using Google maps it&#8217;s important to use GUnload on the page&#8217;s unload event.  Fine when you can access the body tag directly&#8230;.  But if you have the Google map functionality wrapped inside an ascx you need a different approach.</p>
<p>After a big of digging I found how to use jQuery to &#8220;catch&#8221; the unload event.  In case anyone else needs it:</p>
<pre class="brush: jscript;">$(window).unload( function () { GUnload(); } );</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/01/use-jquery-to-replace-body-onunload/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Need to access session variables in an ashx?</title>
		<link>http://www.nerdboy.co.uk/2009/01/need-to-access-session-variables-in-an-ashx/</link>
		<comments>http://www.nerdboy.co.uk/2009/01/need-to-access-session-variables-in-an-ashx/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 16:58:50 +0000</pubDate>
		<dc:creator>nerdboy</dc:creator>
				<category><![CDATA[asp.net]]></category>
		<category><![CDATA[ashx]]></category>
		<category><![CDATA[session]]></category>

		<guid isPermaLink="false">http://www.nerdboy.co.uk/?p=48</guid>
		<description><![CDATA[Just a quick note if you need to access session variables from an ashx, you need to implement SessionState.IRequiresSessionState or IReadOnlySessionState if you only need to read the vars In your ashx change Public Class yourclass :     Implements IHttpHandler     Implements SessionState.IRequiresSessionStat to Public Class yourclass Implements IHttpHandler     Implements SessionState.IRequiresSessionStat]]></description>
			<content:encoded><![CDATA[<p>Just a quick note if you need to access session variables from an ashx, you need to implement SessionState.IRequiresSessionState or IReadOnlySessionState if you only need to read the vars</p>
<p>In your ashx change</p>
<pre class="brush: vb;">Public Class yourclass :     Implements IHttpHandler

    Implements SessionState.IRequiresSessionStat</pre>
<p>to</p>
<pre class="brush: vb;">Public Class yourclass

Implements IHttpHandler

    Implements SessionState.IRequiresSessionStat</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.nerdboy.co.uk/2009/01/need-to-access-session-variables-in-an-ashx/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
