<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-3147727977521057738</id><updated>2008-10-27T02:51:31.011-07:00</updated><title type='text'>blog</title><subtitle type='html'>Articles about web development from the consultants at sourcemotion limited.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/blogger.html'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.sourcemotion.com/blog/atom.xml'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>12</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-8241413496740056525</id><published>2008-10-27T02:38:00.000-07:00</published><updated>2008-10-27T02:51:31.022-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='validation controls'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='CompareValidator'/><title type='text'>Using the ASP.NET CompareValidator control to validate date input</title><summary type='text'>Stumbled across this tip the other day:

http://dotnettipoftheday.org/tips/validate-format-of-integer-double-date-currency.aspx

It turns out that you can validate date inputs with a CompareValidator by setting the Operator property to DataTypeCheck and ValidationDataType to Date (or Integer, Double, Currency, etc.).

This was a new one on me, I had always assumed that the CompareValidator was </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/8241413496740056525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=8241413496740056525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/8241413496740056525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/8241413496740056525'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/10/using-aspnet-comparevalidator-control.html' title='Using the ASP.NET CompareValidator control to validate date input'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-996675277655231707</id><published>2008-09-03T02:49:00.000-07:00</published><updated>2008-09-03T04:56:57.928-07:00</updated><title type='text'>Comparing Linq with SubSonic</title><summary type='text'>After seeing Subsonic in action in the dashCommerce project (Open Source ASP.NET eCommerce application) I have used it in a couple of projects and I like it. It's easy to get up and running, has an intuitive object model and a handy Scaffold component for getting a data admin interface put together quickly. It stands up well compared to other .NET DALs I have used in the past e.g. NEO which I </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/996675277655231707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=996675277655231707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/996675277655231707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/996675277655231707'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/09/comparing-linq-with-subsonic.html' title='Comparing Linq with SubSonic'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-3204055661420003435</id><published>2008-06-23T01:25:00.000-07:00</published><updated>2008-06-23T02:00:09.826-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Image replacement'/><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><title type='text'>CSS Image Replacement Techniques</title><summary type='text'>Web designers like to use images for text because they can use non-standard fonts and have them nicely anti-aliased. There are a number of techniques out there that allow you to make this kind of image text accessible and search-engine friendly.One technique I have seen used is a negative text-indent (see http://phark.typepad.com/phark/2003/08/accessible_imag.html).For example, if you wanted to </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/3204055661420003435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=3204055661420003435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3204055661420003435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3204055661420003435'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/06/css-image-replacement-techniques.html' title='CSS Image Replacement Techniques'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-3160712390972152979</id><published>2008-06-18T09:52:00.000-07:00</published><updated>2008-06-23T01:00:05.672-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='FCKEditor'/><title type='text'>Get the FCKEditor value from javascript</title><summary type='text'>As a postscript to my previous post about customizing the Subsonic Scaffold I also had cause whilst building an admin interface to pull out the XHTML value from the editor in a Javascript function. This took a little bit of searching for so I thought I would post it here:

FCKeditorAPI.GetInstance("ctl00_phAdmin_Scaffold1_PageContent").GetXHTML(true);

Where ctl00_phAdmin_Scaffold1_PageContent is</summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/3160712390972152979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=3160712390972152979' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3160712390972152979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3160712390972152979'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/06/get-fckeditor-value-from-javascript.html' title='Get the FCKEditor value from javascript'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-8169519026785713138</id><published>2008-06-18T08:44:00.000-07:00</published><updated>2008-06-23T00:58:17.929-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Scaffold'/><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='FCKEditor'/><category scheme='http://www.blogger.com/atom/ns#' term='Subsonic'/><title type='text'>Customizing the Subsonic scaffold control</title><summary type='text'>The Subsonic data access layer comes with a control called a Scaffold (the Scaffold concept comes from Ruby on Rails apparently) which allows you to quickly build a simple administration interface for your database tables.

The basic syntax is as follows:

&lt;cc1:Scaffold ID="Scaffold1" runat="server" TableName="Products"&gt;&lt;/cc1:Scaffold&gt;

Where SubsonicProvider is the name of the SubSonicService </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/8169519026785713138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=8169519026785713138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/8169519026785713138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/8169519026785713138'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/06/customizing-subsonic-scaffold-control.html' title='Customizing the Subsonic scaffold control'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-1364659194107785027</id><published>2008-03-21T09:26:00.000-07:00</published><updated>2008-04-23T08:11:28.726-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='validation controls'/><category scheme='http://www.blogger.com/atom/ns#' term='CheckBoxList'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Validating a CheckBoxList with an ASP.NET validation control</title><summary type='text'>If you try to use the standard ASP.NET validation controls to validate a CheckBoxList control you may receive an error message that looks like this:

Control 'CheckBoxList1' referenced by the ControlToValidate property of 'RequiredFieldValidator1' cannot be validated

Unfortunately out of the box the RequiredFieldValidator will not work on the CheckBoxList control. In a recent project I had a </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/1364659194107785027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=1364659194107785027' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/1364659194107785027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/1364659194107785027'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/03/validating-checkboxlist-with-aspnet.html' title='Validating a CheckBoxList with an ASP.NET validation control'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-7982839826435506730</id><published>2008-02-01T09:42:00.000-08:00</published><updated>2008-02-18T10:02:22.498-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Toolset'/><category scheme='http://www.blogger.com/atom/ns#' term='NUnit'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Toolset (Part 4) - NUnit</title><summary type='text'>NUnit is a unit-testing framework for .NET. You can download it here:

http://www.nunit.org/index.php?p=download

In this article I'm going to give a quick guide to how I set up my NUnit test projects. I'm not going to go into the reasons why test-driven development is a good idea, for that why not take a look at this:

http://www.codinghorror.com/blog/archives/000640.html (it has the added </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/7982839826435506730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=7982839826435506730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/7982839826435506730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/7982839826435506730'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/02/toolset-part-4-nunit.html' title='Toolset (Part 4) - NUnit'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-1862147877740585282</id><published>2008-01-29T14:35:00.000-08:00</published><updated>2008-02-21T07:34:08.815-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='log analyzer'/><category scheme='http://www.blogger.com/atom/ns#' term='Toolset'/><category scheme='http://www.blogger.com/atom/ns#' term='spider'/><category scheme='http://www.blogger.com/atom/ns#' term='class browser'/><title type='text'>Toolset (Part 3) - Miscellaneous</title><summary type='text'>Reflector

Reflector is a class browser, explorer, analyzer and documentation viewer for .NET.

http://www.aisto.com/roeder/dotnet/

It is particularly useful if you are having problems with a third party .NET assembly that you do not have the source for as it includes a disassembler. If you open up an assembly (File...Open) and then drill down to a class or method you can right click and select </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/1862147877740585282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=1862147877740585282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/1862147877740585282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/1862147877740585282'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/01/toolset-part-3-miscellaneous.html' title='Toolset (Part 3) - Miscellaneous'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-3647470087749052051</id><published>2007-12-17T10:11:00.000-08:00</published><updated>2008-02-18T07:55:47.489-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XHTML'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='W3C'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Toolset (Part 2) - HTML and CSS</title><summary type='text'>W3C Markup Validation Service
Visual Studio will validate your HTML but this won't tell you if your final page is compliant with W3C Standards since server controls may output invalid HTML or you may write out HTML in your code behind.

http://validator.w3.org/

I usually use the Validate by Direct Input tab because often your site won't be publicly accessible during development. I just View </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/3647470087749052051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=3647470087749052051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3647470087749052051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3647470087749052051'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2008/01/toolset-part-2-html-and-css.html' title='Toolset (Part 2) - HTML and CSS'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-8055298128678617499</id><published>2007-12-10T10:00:00.000-08:00</published><updated>2008-01-14T08:48:16.254-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Toolset'/><category scheme='http://www.blogger.com/atom/ns#' term='SysInternals'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Toolset (Part 1) - SysInternals</title><summary type='text'>I thought I'd do a regular post on the free tools I often use in development. Some are nice to have, some I now find completely indispensable.

The SysInternals website (acquired by Microsoft in 2006) provides a number of tools which can be very useful to help developers diagnose system problems.
http://technet.microsoft.com/en-us/sysinternals/default.aspxHere is a brief summary of some of the </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/8055298128678617499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=8055298128678617499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/8055298128678617499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/8055298128678617499'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2007/12/toolset-part-1-sysinternals.html' title='Toolset (Part 1) - SysInternals'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-3708092029101664558</id><published>2007-11-25T11:20:00.000-08:00</published><updated>2008-01-14T08:39:04.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Serialization'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Deserialization'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Xml Serialization in C#</title><summary type='text'>In a number of recent projects we have had to expose web services to third parties. This requires discipline in agreeing and sticking to a XML schema for your communication.

BaseSerializableObject
To make sure our classes keep in step with our schemas we utilise a base serializable object class which provides methods for converting our objects to and from XML. Each object then implements a </summary><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/3708092029101664558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3147727977521057738&amp;postID=3708092029101664558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3708092029101664558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3708092029101664558'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2007/11/something-else.html' title='Xml Serialization in C#'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3147727977521057738.post-3336513769583466381</id><published>2007-11-05T10:44:00.000-08:00</published><updated>2008-01-14T09:26:07.253-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='solutions'/><category scheme='http://www.blogger.com/atom/ns#' term='IT'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Welcome to the sourcemotion blog</title><summary type='text'>Welcome to the new sourcemotion blog. I'm going to be posting articles about IT, specifically web development using Microsoft technologies. I hope people find it useful. I think it will be useful and interesting for me to have a log of the sorts of things I have been working on and the solutions we have come up with.</summary><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3336513769583466381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3147727977521057738/posts/default/3336513769583466381'/><link rel='alternate' type='text/html' href='http://www.sourcemotion.com/blog/2007/11/first-post.html' title='Welcome to the sourcemotion blog'/><author><name>Steve Sage</name><uri>http://www.blogger.com/profile/10122849763925947037</uri><email>noreply@blogger.com</email></author></entry></feed>
