HFEA Guide
Background
Dr. Foster Intelligence were commissioned by the Human Fertility and Embryology Authority to produce a set of booklets and a fully accessible website that conformed to the WAI Level 1 guidelines for web accessibility, which presented its own unique challenges. The site allows visitors to search for fertility clinics, either in their region of the UK or close to their postcode. Once they have found a clinic of interest, they can view location details as well as background information on services provided and performance tables and graphs, both for the individual clinic and the national average for comparison.
How the system works
I wrote the site in ASP.NET 2.0, using C#, with the data being held in a SQL Server 2000 database. I built the site using a four-tier architecture, with two levels of abstraction between the presentation layer and the data layer, as opposed to the usual one layer of business logic found in a traditional three-tier architecture. The business objects lived in their own layer as normal, but I built an extra level between them and the data access layer, as I do in all my ASP.NET projects, which was used to prepare the data and pass it between the data access layer and the business objects layer.
Accessibility
As the site had to be WAI accessible, this meant, amongst other things, that all the content had to be accessible regardless of whether the user had JavaScript enabled in their browser. This approach necessitated the use of image button ASP.NET controls rather than standard button controls, because when you view the source of an ASP.NET page, image button controls are rendered as submit buttons, whereas button controls are simply rendered as normal HTML buttons. ASP.NET functionality such as postbacks is accomplished with JavaScript behind the scenes. With JavaScript switched off, clicking normal HTML buttons won't do anything, but clicking submit buttons will still post the page back to the server.
I also had to make use of the querystring for passing data back and forth, so that it would still be available for non-JavaScript users. While this was quite trivial for the simple search results, the advanced search necessitated passing upwards of twenty querystring parameters around without losing any of the values (unless they were deliberately tampered with of course). If a JavaScript-enabled navigation click didn't pass values via the query string, I would attach the necessary parameters to each link on the page ready for the next postback.