Technology Toolbox

Your technology Sherpa for the Microsoft platform

Jeremy Jameson - Founder and Principal



Web Development

There are 53 entries for the tag Web Development.

Import website (IIS) logs into SQL Server using Log Parser and PowerShell

Here's a little PowerShell script I whipped up to import the log files into a SQL Server database for some "quick and dirty" analysis.

Why I chose not to programmatically filter errors reported by ELMAH

If you think that programmatically filtering errors in ELMAH is as easy as specifying filters in Web.config, you might be in for a surprise.

Unit tests for filtering errors in ELMAH

In my previous post, I briefly mentioned the unit tests I created while trying to figure out why my ELMAH filter was not working as expected. Well, here they are for your enjoyment (or idle curiosity).

Filter ELMAH email messages to avoid getting spammed by hackers

I finally got around to configuring an ELMAH filter for the website (so I wouldn't be bothered by frequent email messages due to failed hack attempts). During the process, I also discovered a couple of bugs in ELMAH (and learned a lot more about the internal workings of ELMAH).

Use protocol-relative URLs to avoid mixed mode content

Here's a great tip I picked up from Phil Haack a few weeks ago for avoiding those pesky warnings like "Only secure content is displayed."

HTML-to-PDF converters

Looking for a solution to convert from HTML to PDF? Here is a list of the products I discovered during my research as well as the results of the head-to-head competition.

Website style guide, custom CSS classes, and HTML snippets

If, like me, you use Expression Web to author HTML content, then I hope you take advantage of the "Snippets" feature.

Using Microsoft Excel to open numerous Web pages

Think you can just add a HYPERLINK column in Excel and easily open dozens of Web pages at a time? Think again.

Supporting both "" and "" (a.k.a. Building, part 23)

Can visitors browse your website using "" as well as ""? Is this documented in your test spec? It should be -- as I found out...the hard way.

Is directory browsing enabled or disabled on your website?

Starting with IIS 6, directory browsing is disabled by default -- but are you really sure this is the way your website is configured?

Implementing Google Analytics (a.k.a. Building, part 22)

In yesterday's post, I described how I integrated Google Site Search into the Technology Toolbox website. This post provides a similar walkthrough for implementing Google Analytics.

Implementing Google Site Search (a.k.a. Building, part 21)

In this post, I provide another step-by-step walkthrough of a feature, this time sharing the details of how I implemented the search functionality on

Creating a simple "Contact" form in ASP.NET (a.k.a. Building, part 20)

In this post, I explain the iterative approach used to create the "Contact" form for the Technology Toolbox website. Through a sequence of 9 discrete steps, I describe my typical development process from initial concept to what I call "feature complete."

Shared files and assemblies in ASP.NET applications (a.k.a. Building, part 17)

This post describes a couple of scenarios where you might need to share files and assemblies within an ASP.NET website, as well as some tricks for making this completely painless (from a development and deployment perspective).

Custom CAPTCHA control for ASP.NET application and Subtext blog (a.k.a. Building, part 16)

In this post, I provide a detailed walkthrough of the custom CAPTCHA control used on the Technology Toolbox website (including some subtle issues discovered when using this control on Subtext blog pages).

Best practices for error handling in ASP.NET Web applications (a.k.a. Building, part 14)

So, you've created a custom error page, enabled the <customErrors> element in the Web.config file, and considered it done -- but are you sure that all the bases are covered?

Serving minified jQuery/CSS in PROD and uncompressed versions in DEV (a.k.a. Building, part 13)

In this post, I show how to serve minified versions of JavaScript and CSS files in Production environments and uncompressed versions in Development environments.

Using jQuery to create an expandable archive list for blog posts (a.k.a. Building, part 12)

In my previous post, I briefly mentioned how I use a CSS sprite and jQuery to render the expandable list under the "Archives" section on the various blog pages of the Technology Toolbox site. This post details the implementation of that feature.

Using CSS sprites to improve site performance and user experience (a.k.a. Building, part 11)

In my previous post, I briefly mentioned how the "Most Popular Posts" section on the Technology Toolbox home page uses a CSS sprite to render the arrow image next to each list item. In this post, I explain more about how CSS sprites are used on the site, why they are valuable, and some caveats when using them.

Using the Entity Framework and LINQ to list the most popular posts from Subtext (a.k.a. Building, part 10)

In my previous post, I shared the inner workings of the "Most Recent Posts" section on the Technology Toolbox home page. In this post, I'll show you how I built on that foundation to generate the content for the "Most Popular Posts" section.

Using the Entity Framework and LINQ to list the most recent posts from Subtext (a.k.a. Building, part 9)

In a previous post, I mentioned how the new Technology Toolbox home page highlights the most recent blog posts from Subtext. In this post, I'll show you how easy this feature was to develop -- thanks to the Entity Framework and LINQ.

PowerShell script to deploy/rebuild an ASP.NET Web application (a.k.a. Building, part 8)

In this post, I describe the PowerShell script used to rebuild the Development and Test environments for From a high-level perspective, the script deletes the IIS website (if it exists), creates a new website (including the corresponding application pool), and then copies the files for the main site as well as the Subtext files for the /blog application...

Migrating a blog from Telligent to Subtext using Web scraping, the Html Agility Pack, BlogML, and more (a.k.a. Building, part 6)

While I don't expect many people will need to migrate blog posts from Telligent to Subtext, I do believe it is valuable to provide a walkthrough of how I typically approach a "content migration scenario" -- since I frequently encounter this kind of requirement when working with enterprise customers...

Semantic HTML for blog pages based on hAtom 0.1 microformat (a.k.a. Building, part 5)

While creating the new site, one of my first tasks was to define the structure of the HTML for the blog pages. I briefly considered using my old MSDN blog as a reference. However, I quickly dismissed that option after viewing my MSDN blog home page with CSS disabled...

Creating a style guide and color palette for a Web application (a.k.a. Building, part 4)

In my previous post, I described how I typically create a "static HTML prototype" for an ASP.NET or SharePoint Web application. By working directly in HTML at the beginning, I can rapidly define the structure of the content and subsequently create the corresponding CSS rules to style the pages...

Creating a static HTML prototype for a website (a.k.a. Building, part 3)

Regardless of the platform a website will eventually run on (e.g. ASP.NET or SharePoint), I typically recommend creating a static HTML prototype to demonstrate key features, illustrate various design alternatives (e.g. different page layouts, color schemes, etc.), and gather feedback...

Setting up a new Web development project (a.k.a. Building, part 2)

Once I settled on using Subtext as the blogging solution for the Technology Toolbox site, I turned my attention to working on the other areas of the site...

Why was Subtext selected for (a.k.a. Building, part 1)

In my previous post, I mentioned how my new blog is currently powered by Subtext -- or rather my own (slightly modified) version of Subtext 2.5. I also noted that Subtext wasn't my first choice when selecting a blogging solution...


In this inaugural post for my new blog location, I'll introduce various features of the new Technology Toolbox website and provide a high-level overview of the underlying architecture. Subsequent posts will cover different aspects of the site in greater detail.

Internet Explorer 9 Upgrade

Two years ago, I wrote a post about upgrading to Internet Explorer 8 . Well, in case you missed the announcement a couple of days ago, Internet Explorer 9 has been released. Woohoo! It's been a long time coming, but I believe the wait has been well...

Web Standards Design with SharePoint, Part 3

Last week I received the following comment on a blog post I wrote last year regarding Web standards design with Microsoft Office SharePoint Server (MOSS) 2007: "The Media Guy" Great article.. was very helpful. I used for my master page...

A Modal Popup Framework Based on the AJAX Control Toolkit

The "Announcements" feature that I developed for a customer about a year ago uses a modal popup window to display content to users. The solution leverages the AJAX Control Toolkit to render the modal popups – specifically the ModalPopupExtender...

A Custom SqlRoleProvider for "Authenticated Users"

Prior to the recent "v2" release on my current project, we had been using the ASP.NET SqlRoleProvider to manage the various roles used by the Web site. Over a month ago, someone contacted me about an issue he was encountering with a specific user....

Web Standards Design with SharePoint, Part 2

In the first part of this series, I explained one approach for building Web sites in Microsoft Office SharePoint Server (MOSS) 2007 based on Web standards and the 960 Grid System . I had intended on following up with a sample solution based on a fictitious...

Avoid Issues with Caching by Using "Theme Versions"

In a previous post discussing Web standards design, I mentioned how I like to use "Theme" folders to organize CSS files and related images that define a specific look-and-feel for a site. For example, suppose we are tasked with building the Internet...

Recovering Your Work After an Expression Web Crash

I am getting a little tired of Expression Web 4 crashing on me. I'm not sure why I'm repeatedly encountering issues with the latest version of Expression Web, but I suspect -- given the frequency at which it is crashing -- it may have something to...

Removing Downloaded Program Files (e.g. ActiveX Controls) in Windows 7/IE 8

In the latest sprint on my current project, we are adding yet another major feature to a customer service portal -- specifically, the ability to view live video feeds from security cameras. The vendor this particular customer has selected for providing...

Custom Table Headers With the ASP.NET GridView Control

In my previous post , I showed an example KPI dashboard for a Web application with a table similar to the following: Key Performance Indicators (Detail) Site 2009 Q3 2009 Q4 2010 Q1 Thresholds Duncan 93% 95% ...

Disable Pinging of Your Application Pool Worker Process in IIS

Yesterday I was doing another "Knowledge Transfer" session and before I started walking through some code in a debugging session, I took a brief detour to show the team how I recommend disabling the "ping" functionality in IIS for your application pool...

Web Standards Design with MOSS 2007, Part 1

I've mentioned before that I became somewhat of a Web standards zealot several years ago. Consequently, regardless of whether I'm building Web sites using the core ASP.NET platform or Microsoft Office SharePoint Server (MOSS) 2007, I strive to ensure...

Microsoft Translator Widget

This week I stumbled upon the new (and very cool) Microsoft Translator Widget . Actually, this isn't really new (apparently it has been available for over six months now) but it was certainly new to me. A colleague of mine on a previous project...

Constraining Tables with CSS

Have you ever wanted to display data in a table but limit the size of the rows and columns within the table? For example, consider the classic master/detail view that we often find in software applications, in which items are shown in a summary table...

Latest Version of Opera Ignores Hosts File

As I mentioned in my previous post , I discovered a rather nasty UI bug last week with the new portal we are building for a customer. Unfortunately, the layout issue only occurred in the Safari browser. Since I couldn't repro the issue in Internet...

Troubleshooting Layout Problems with Safari

I discovered a rather nasty UI bug last week with the new portal we are building for a customer. Unfortunately, the layout issue only occurred in the Safari browser. Even worse, I discovered it only a day before the CEO of customer discovered it himself...

DataNavigateUrlFormatString Does Not Allow "javascript:"

I encountered an interesting bug last Friday with the ASP.NET HyperLinkField control. To understand the scenario, think of the typical "view detail" feature when showing summary data in a table. In other words, you want to provide users the ability to...

Add Rooler to Your Web Development Toolbox

This past May, one of my colleagues notified me of a new tool called "Rooler" that allows you to easily measure anything displayed on your screen. I definitely consider this tool a "must have" for anyone out there doing Web development. While tools...

KB 896861 and "Microsoft Fix it"

A couple of days ago, I rebuilt one of my development VMs for Microsoft Office SharePoint Server (MOSS) 2007. As I've noted in a previous post , I've found that I need to apply one of the registry hacks described in the following KnowledgeBase article...

Formatting Code for My Blog

It occurred to me this morning that while I previously shared some details on how I manage my MSDN blog , I've never shared my method for formatting code for the Web. Actually, calling it "my method" is definitely a bit of a stretch. I certainly didn...

Expression Web, My MSDN Blog, and (Now) Team Foundation Server

In case you haven't picked it up from some of my previous posts, I became somewhat of a "Web standards zealot" back in 2006 while creating a "community site" for a local organization of mental health professionals and attorneys that help children and...

Creating Wireframes for Page Layouts

When helping customers migrate their Internet sites to Microsoft Office SharePoint Server (MOSS) 2007, I've found it very helpful to create wireframes showing the various fields, Web Parts, and master page content. For the last several years, I've been...

Configuring Logging in ASP.NET Applications (and SharePoint)

This post continues on the original post for my simple, but highly effective approach to logging and the follow-up post which introduced configuring logging for console applications . Obviously not all solutions are simple console-based applications...

Internet Explorer 8 Upgrade

In case you missed the announcement, Internet Explorer 8 was released last week. I'll be honest, I tried one of the early betas of IE8 on a VM a long time ago, but I didn't spend a lot of time with it because it always seemed like there was some more...

Fessing Up About Firefox

My name is Jeremy, and I'm a Firefox user. There, I've said it. I know, I know...what am I thinking, a Microsoft employee telling the world that Internet Explorer isn't the end all, be all browser for everyone?! Well, first let me clarify a little...