<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-8185817578532832607</id><updated>2010-02-18T11:17:19.022Z</updated><title type='text'>CraigW Blog</title><subtitle type='html'>A catalogue of my discoveries in software development and related subjects, that I think might be of use or interest to everyone else, or to me when I forget what I did!</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/blog-content.html'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.craigwardman.com/blog/atom.xml'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>37</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-1520547153673965009</id><published>2010-01-07T11:33:00.016Z</published><updated>2010-01-14T17:18:31.495Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>AJAX Calendar Extender IE8 Bug</title><summary type='text'>The calendar extender that comes with the AJAX Control Toolkit has a bug in IE8 whereby the 'left/right' arrows to scroll through months do not work.This is caused by the fact that the 'title' div spans the full width of the control and so the links end up behind this div.To fix this problem, add the following line to your stylesheet:.ajax__calendar_title {width:150px; margin:auto; }</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/1520547153673965009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=1520547153673965009&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1520547153673965009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1520547153673965009'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2010/01/ajax-calendar-extender-ie8-bug.html' title='AJAX Calendar Extender IE8 Bug'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-6295132394922372485</id><published>2010-01-04T14:17:00.006Z</published><updated>2010-01-14T17:18:31.496Z</updated><title type='text'>HelpFindMeA.co.uk Launches!</title><summary type='text'>One of the biggest projects I have worked on has now launched! As mentioned in the projects section of my website, architecturally HelpFindMeA.co.uk is a site I created in ASP.NET 3.5 using several MS-SQL backend databases. The site uses several n-Tier layered projects built in C# to access the various data sources from the VB.NET web front end. The site was built with extensibility in mind to </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/6295132394922372485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=6295132394922372485&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/6295132394922372485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/6295132394922372485'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2010/01/helpfindmeacouk-launches.html' title='HelpFindMeA.co.uk Launches!'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-2658268449907945445</id><published>2009-12-04T15:56:00.010Z</published><updated>2010-01-14T17:18:31.499Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Disabling Weekends in the ASP Calender Control</title><summary type='text'>ASP.NET includes a built in calendar control 'asp:Calendar' which is an easy way to display a calendar on your page.This is fully customisable in terms of look and feel and you can use this functionality to apply restrictions to the selectable dates.A lot times when building commercial websites the calendar week should only really apply to week days and not weekends. Although you should be </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/2658268449907945445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=2658268449907945445&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2658268449907945445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2658268449907945445'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/12/disabling-weekends-in-asp-calender.html' title='Disabling Weekends in the ASP Calender Control'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-4517286667611872266</id><published>2009-08-11T11:13:00.012+01:00</published><updated>2010-01-15T13:46:25.452Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Recreating SSI Functionality in ASP.NET</title><summary type='text'>If your site runs on an ASP.NET server and does not support the classic SSI method of including files for output.i.e.&lt;!--#include virtual="/myinclude.asp" --&gt;Then you may wish to implement your own version of SSI.In my particular example, I am reading from a HTML file on the server and processing the content before rendering it to the client. I don't see any reason however, why this technique </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/4517286667611872266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=4517286667611872266&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/4517286667611872266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/4517286667611872266'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/08/recreating-ssi-functionality-in-aspnet.html' title='Recreating SSI Functionality in ASP.NET'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-5914346727663638499</id><published>2009-07-17T11:41:00.006+01:00</published><updated>2010-01-14T17:18:31.505Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Definining Event Handlers for Custom Events In the Markup</title><summary type='text'>When you have controls nested inside a databound control, you have two options to hook up their events to event handlers.One option is to handle the 'OnItemDataBound'/'OnRowDataBound' or equivalent event of the parent control, find the child control and then use 'AddHandler' to hook up the event handler.The second option is to declaratively put the name of the event handler sub in the markup of </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/5914346727663638499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=5914346727663638499&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5914346727663638499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5914346727663638499'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/07/definining-event-handlers-for-custom.html' title='Definining Event Handlers for Custom Events In the Markup'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-978108970167506826</id><published>2009-06-05T11:21:00.006+01:00</published><updated>2010-01-14T17:18:31.507Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Reverse Engineering'/><title type='text'>Fixing Binary Formatted Data After a Code Change</title><summary type='text'>I seem to have a habit of changing classnames and/or namespaces as a project develops to make them more meaningful and to help make space for classes which would have benefited from another's name/namespace.When using the binary formatter to serialize an instance of an object, it is important to note that the type information (assembly, namespace, classname) is stored with the data; as opposed to</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/978108970167506826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=978108970167506826&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/978108970167506826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/978108970167506826'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/06/fixing-binary-formatted-data-after-code.html' title='Fixing Binary Formatted Data After a Code Change'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-1588605177506439983</id><published>2009-05-15T17:13:00.006+01:00</published><updated>2010-01-14T17:18:31.510Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Setting a validation group on a User Control</title><summary type='text'>Using the built in .NET validation, you can assign a 'validation group' to a set of validation controls, submit buttons and validation summary. This creates a separation between different sets of controls on the page, so that only the relevant controls are validated for a specific submit button.When you design your application as separate user control components, you may want to set a different </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/1588605177506439983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=1588605177506439983&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1588605177506439983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1588605177506439983'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/05/setting-validation-group-on-user.html' title='Setting a validation group on a User Control'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-5173909237813905558</id><published>2009-05-12T09:30:00.004+01:00</published><updated>2010-01-14T17:18:31.513Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Unit Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C Sharp'/><title type='text'>Running Initialization Code in Visual Studio Unit Testing</title><summary type='text'>Often in a project, you have code which runs when the application starts (such as in Program.cs or in your Global.asax file) which will set up all of your shared resources for the rest of the project, such as initializing global variables, configuring the BLL, connecting to a datasource etc.As mentioned above, their are places to put this code provided for you.When you are working within a unit </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/5173909237813905558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=5173909237813905558&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5173909237813905558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5173909237813905558'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/05/running-initialization-code-in-visual.html' title='Running Initialization Code in Visual Studio Unit Testing'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-2255120432259070975</id><published>2009-04-25T00:10:00.013+01:00</published><updated>2010-01-14T17:18:31.516Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Keyword Density Cloud</title><summary type='text'>The 'keyword density cloud' was a nice little widget I worked on at work, to provide a graphical 'tag cloud like' analysis of the keyword density for a given web page.It can be used by SEO concious writers to quickly examine what a page of content may appear to be about (to search engines) based on the 'top words' and the relative strength of those top words, but is also a nice overview of the </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/2255120432259070975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=2255120432259070975&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2255120432259070975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2255120432259070975'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/04/keyword-density-cloud.html' title='Keyword Density Cloud'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-1240398824094319313</id><published>2009-03-13T10:22:00.007Z</published><updated>2010-01-14T17:18:31.518Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Preventing Uppercase URLs in ASP.NET</title><summary type='text'>According to RFC3986, the path portion of a URI is case-sensitive.Google and other search engines use this ruling in their crawlers, so that pages which differ by case are treated as different pages.This can be problematic when working in a non-case sensitive environment, such as IIS on Windows, because this rule is ignored and any variation in case will still return the same page. This leads to </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/1240398824094319313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=1240398824094319313&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1240398824094319313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1240398824094319313'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/03/preventing-uppercase-urls-in-aspnet.html' title='Preventing Uppercase URLs in ASP.NET'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-5133324747942448151</id><published>2009-03-09T09:21:00.006Z</published><updated>2010-01-14T17:18:31.523Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Non-Databound DropDownList SelectedValue Problem</title><summary type='text'>When you have an asp:DropDownList which is *not* databound, (i.e. you add the items manually) there are a few things you have to do to get 'SelectedValue' to work.ASP.NET will ignore the 'SelectedValue' when you manually add items unless you make a call to 'DataBind' on the drop down list, so you need to add this line of code to force ASP.NET to select the correct item.However, because the '</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/5133324747942448151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=5133324747942448151&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5133324747942448151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5133324747942448151'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/03/non-databound-dropdownlist.html' title='Non-Databound DropDownList SelectedValue Problem'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-3209766257668985455</id><published>2009-02-24T09:51:00.006Z</published><updated>2010-01-14T17:18:31.525Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Automatic Unique Names for Session/ViewState Data</title><summary type='text'>When you store information using a key based storage mechanism, such as is provided by the 'Session' and 'ViewState' objects, you want to avoid referencing these directly by key name, as this means all references to the data need to be casted, leaving you liable to invalid cast exceptions, it means it is up to the developer to remember the key names and also leaves you liable to typos, spelling </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/3209766257668985455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=3209766257668985455&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/3209766257668985455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/3209766257668985455'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/02/automatic-unique-names-for.html' title='Automatic Unique Names for Session/ViewState Data'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-9175360325262837192</id><published>2009-02-17T16:17:00.006Z</published><updated>2010-01-14T17:18:31.529Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Textbox CrLf in Firefox using AJAX UpdatePanel</title><summary type='text'>When using a MultiLine textbox inside an ASP.NET AJAX update panel, you may encounter problems with carriage return line feeds in your text on the server using Firefox (and potentially other browsers).Internet Explorer uses the Windows style CrLf (13 10) for newlines in a textarea but Firefox uses Unix style Lf (10) only.On a synchronous postback it seems ASP.NET fixes this and you will get CrLf </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/9175360325262837192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=9175360325262837192&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/9175360325262837192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/9175360325262837192'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/02/textbox-crlf-in-firefox-using-ajax.html' title='Textbox CrLf in Firefox using AJAX UpdatePanel'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-8654836228539791250</id><published>2009-02-02T13:47:00.008Z</published><updated>2010-01-14T17:18:31.531Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expressions'/><title type='text'>Regular Expression Tools</title><summary type='text'>A useful thing to have as a developer is a tool for testing your regular expressions as you build them.There are many out there, but I have two particular favourites.For simple testing when building a regex, I like to use 'RegexBuilder'. It has a very simple and quick off the mark interface where you can start typing your regex with 2 testing texts to see if it is working properly:For more </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/8654836228539791250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=8654836228539791250&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/8654836228539791250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/8654836228539791250'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/02/regular-expression-tools.html' title='Regular Expression Tools'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-4626330707361603919</id><published>2009-01-13T15:48:00.006Z</published><updated>2010-01-14T17:18:31.533Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET Multiple Page Load Problem</title><summary type='text'>I've had this problem many a time and every time I get it again I forget what the cause was; This time I'm going to blog it!I have encountered three similar situations where ASP.NET fires the page_load event twice, or more. In one scenario (on a postback) your page load gets called once for the postback (IsPostback = true) and then gets called again, with IsPostback = false, which can cause a </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/4626330707361603919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=4626330707361603919&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/4626330707361603919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/4626330707361603919'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/01/aspnet-multiple-page-load-problem.html' title='ASP.NET Multiple Page Load Problem'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-241597656394866016</id><published>2009-01-07T10:31:00.007Z</published><updated>2010-01-14T17:18:31.535Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Visual Studio, Cassini, IIS and Debugging</title><summary type='text'>If you develop ASP.NET websites, you are probably aware that instead of using the built in Visual Studio Web Server (Cassini) for debugging, you can use IIS.If you have configured this for your project, Visual Studio creates a virtual directory in IIS and pressing F5 to debug won't start the built in server but will instead attach to the IIS website.Using IIS over Cassini has several advantages, </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/241597656394866016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=241597656394866016&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/241597656394866016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/241597656394866016'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2009/01/visual-studio-cassini-iis-and-debugging.html' title='Visual Studio, Cassini, IIS and Debugging'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-1040007344896620334</id><published>2008-12-10T10:57:00.007Z</published><updated>2010-01-14T17:18:31.538Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Data Binding to an Extension Method</title><summary type='text'>If you have defined extension methods to your entities in your BLL, (for example to format the output, or amalgamate some result) you may wish to display the return value of the extension method in a bound control, such as an ASP.NET GridView.In order to access an extension method, you have to import the containing namespace into the codefile you are working with. The problem is that the bindings</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/1040007344896620334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=1040007344896620334&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1040007344896620334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/1040007344896620334'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/12/binding-to-extension-method.html' title='Data Binding to an Extension Method'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-2795824547843914730</id><published>2008-11-28T15:33:00.007Z</published><updated>2010-01-14T17:18:31.541Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C Sharp'/><category scheme='http://www.blogger.com/atom/ns#' term='Regular Expressions'/><title type='text'>Matching Tags using Regular Expressions Balancing Groups</title><summary type='text'>The regular expressions engine provided by the .NET Framework includes a new feature known as 'balancing groups'.This feature allows you to increment/decrement the match count of a named capturing group by giving the group a positive and negative match context. You can then test to see you have an equal number of matches, by testing if the group has a value (i.e. an effective zero result means </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/2795824547843914730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=2795824547843914730&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2795824547843914730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2795824547843914730'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/11/matching-tags-using-regular-expressions.html' title='Matching Tags using Regular Expressions Balancing Groups'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-7777981910257089084</id><published>2008-11-18T16:08:00.009Z</published><updated>2010-01-14T17:18:31.545Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C Sharp'/><category scheme='http://www.blogger.com/atom/ns#' term='LINQ'/><title type='text'>LINQ Select Distinct on Custom Class Property</title><summary type='text'>The standard LINQ .Distinct() function will pass your IEnumerable items to the 'default comparer' to differenciate the items.If your IEnumerable contains objects of an arbitrary class you would ordinarily have to create a IEqualityComparer to compare the relavent property of each instance.This seems like too much work just to simply remove objects that have a duplicate property value.I came up </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/7777981910257089084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=7777981910257089084&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/7777981910257089084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/7777981910257089084'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/11/linq-select-distinct-on-custom-class.html' title='LINQ Select Distinct on Custom Class Property'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-689890510690616498</id><published>2008-11-05T11:09:00.007Z</published><updated>2010-01-14T17:18:31.548Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ScriptManager Service Reference and HTTPS</title><summary type='text'>If you use the ASP.NET AJAX script manager with a service reference to a local WCF service, then you may encounter problems when using HTTPS on the page.If you have not configured your service for use with HTTPS you will most likely receive 'xyzService is not defined' errors in your Javascript. This is because when you add a service reference to '~/Services/xysService.svc' the AJAX Script Manager</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/689890510690616498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=689890510690616498&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/689890510690616498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/689890510690616498'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/11/scriptmanager-service-reference-and.html' title='ScriptManager Service Reference and HTTPS'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-7248447060216273350</id><published>2008-11-04T14:38:00.008Z</published><updated>2010-01-14T17:18:31.550Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='URL Rewriting'/><title type='text'>ASP.NET URL Rewriting and Tilde</title><summary type='text'>In ASP.NET controls you can use the tilde '~' character to signify the virtual application root of the website, for example when sourcing an image for an ImageButton.Code:   &lt;asp:ImageButton ID="ImageButton1" runat="server" AlternateText="Example Button" ImageUrl="~/images/button.png" /&gt; This is fine for most cases. However, when using URL rewriting (via HttpHandlers) it can become a problem, </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/7248447060216273350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=7248447060216273350&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/7248447060216273350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/7248447060216273350'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/11/aspnet-url-rewriting-and-tilde.html' title='ASP.NET URL Rewriting and Tilde'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-4156966636749451554</id><published>2008-10-30T15:14:00.008Z</published><updated>2010-01-14T17:18:31.554Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='URL Rewriting'/><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><title type='text'>Safe Rewriting URL Encoder</title><summary type='text'>When using URL rewriting to make nice URLs without querystrings, it is useful to include a meaningful name for the page, i.e. the page title, in the URL itself. This helps usability in distinguishing pages and also aids search engines in spidering different content that may be generated by a single page on your server.For some reason, the HttpUtility.UrlEncode and HttpUtility.HtmlEncode just dont</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/4156966636749451554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=4156966636749451554&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/4156966636749451554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/4156966636749451554'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/10/safe-url-encoder.html' title='Safe Rewriting URL Encoder'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-3139481468023462143</id><published>2008-10-27T20:51:00.014Z</published><updated>2010-01-14T17:18:31.557Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Blogger'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Blogger extensions and integration using ASP.NET</title><summary type='text'>After recently starting this blog using my Blogger account and its FTP publishing feature I wanted a more seamless integration with my existing site for the index page of the blog. In other words, I wanted to show the latest blogs as part of my existing site using the masterpage I have in ASP.NET.To achive this goal, I have set Blogger to publish to /blog on my domain, with a proprietary filename</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/3139481468023462143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=3139481468023462143&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/3139481468023462143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/3139481468023462143'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/10/blogger-extensions-and-integration.html' title='Blogger extensions and integration using ASP.NET'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-2242348475186127027</id><published>2008-10-23T21:48:00.003+01:00</published><updated>2010-01-14T17:18:31.560Z</updated><title type='text'>Blog Launch</title><summary type='text'>I've started this blog on my site to catalogue anything I think might be of use or interest to everyone else, or to me when I forget what I did!This will most likely be software development related stuff, since this is what I do day in day out. This will mainly be ASP.NET/VB.NET/C# stuff depending on what language I am using at the time but will also have some other stuff thrown in for good </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/2242348475186127027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=2242348475186127027&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2242348475186127027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/2242348475186127027'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/10/blog-launch.html' title='Blog Launch'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8185817578532832607.post-5297362375280252224</id><published>2008-10-09T10:24:00.005+01:00</published><updated>2010-01-14T17:18:31.563Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='VB.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Programmatically Setting the Default Button of a Textbox</title><summary type='text'>In ASP.NET, setting the default button of a textbox is usually a simple task as you simply wrap the button and textbox in an asp:panel and set the 'defaultbutton' attribute on the panel.Sometimes however, it is not possible to put the button and textbox in a panel together, for example if the textbox is part of a databound template (e.g. gridview, repeater etc.)If you look at the HTML code that </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/5297362375280252224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8185817578532832607&amp;postID=5297362375280252224&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5297362375280252224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8185817578532832607/posts/default/5297362375280252224'/><link rel='alternate' type='text/html' href='http://www.craigwardman.com/blog/2008/10/programmatically-setting-default-button.html' title='Programmatically Setting the Default Button of a Textbox'/><author><name>craigw</name><uri>http://www.blogger.com/profile/01942092393554581308</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01367542872869055359'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>