W3C validation of ASP.Net output

Why is my markup not valid?

A while ago I had to make certain that a CMS driven site built in .Net met some validation criteria.  Specifically the XHTML markup.  Running it by the W3C validator service, the markup always failed.

I fixed the obvious within the web.config.  For example, the following is needed to force the application to render XHTML:

<configuration>
	...
	<system.web>
		...
		<xhtmlConformance mode="Strict" />
		...
	</system.web>
	...
</configuration>

If I painfully cut and pasted the HTML into the Validator’s form field, it passed.  The problem is, is that the service is not recognised by the Web server, and so a helper file in the application is required.

Validation groups in .Net

Obvious when you know how

Evening all.  Not posted in a while as I’ve plenty going on in the ‘real’ world.  Anyway, last week I was building a search form whereby you could either search by reference code, or by using full search criteria.

The problem I had is that both search ‘forms’ existed on one Web Form, and I was using Validation controls to check each.  So when using either submit button, both search groups were validated together.  Not useful when I wanted to submit each set of controls independently of each other.  So there I was, coding to disable either set of validation controls when a submit button is clicked.

“Validation groups!” I hear you cry.  Yes, I know that now.

Using jQuery selectors to reference .Net controls

Overcome the problem of ids rendered differently to those declared in your code

You place a control onto your page:

<asp:Content ID="Content1" ContentPlaceHolderID="Content" Runat="Server">
	<asp:TextBox Id="Firstname" Runat="Server" />
</asp:Content>
The output is rendered as:
<input name="ctl00$Content$FirstName" type="text" id="ctl00_Content_FirstName" />

In the example above, the disparity in the rendered id attribute occurs because the TextBox control has been placed within a Content control, as the Page object inherits a MasterPage.

So how can you robustly reference the control using client-side JavaScript, regardless where the control resides?  Using jQuery it’s fairly trivial:

var $firstname = $("[id$=FirstName]");

This little snippet makes use of the jQuery attributeEndsWith selector, as documented here.  Bare in mind that an array is returned, as any control with an id that ends in FirstName will be selected.

Consume .Net Web service using jQuery

Avoid using the Microsoft client library. Instead use jQuery.

The JavaScript functionality that is injected into .Net pages seems limited when compared to jQuery.

Whilst looking for a way to use jQuery instead of the stock Microsoft client library, I came across this excellent article.

There doesn’t seem to be too much on Web about this subject.  Maybe most .Net developers stick to Microsoft tools, but I like using jQuery for all my client scripting, and would rather not use more than one library.  So as it look me a while to get example code working, I’ve included my efforts.