Category Archives for ASP.NET

How to Build HTML Helpers like Html.BeginForm() in ASP.NET MVC

If you’ve used ASP.NET MVC for more than five minutes, you’ve probably used the Html.BeginForm helper method.

@using (Html.BeginForm()) {
// Form Fields go here

This method wraps your content in a form tag. It’s a handy way to build forms, but we can also create our own html helpers for other container elements. In this post, I’m going to show you how to wrap a Bootstrap row in an HTML helper.

Bootstrap, the UI library that comes with .NET, makes it easy to build professional looking web applications. One of it’s primary disadvantages, however, is that you have to write a lot of markup to get your layouts to work correctly. We can reduce this by creating a custom HTML Helper that works like Html.BeginForm().

@using (Html.BeginRow()) {
// Grid content goes here

Step 1

Create a Private Class that implements IDisposable. Have the constructor take a TextWriter object. Set the dispose method to use the text writer to output the closing tag for the row.

private class RowContainer : IDisposable {
    private readonly TextWriter _writer;

    public RowContainer(TextWriter writer) {
        _writer = writer;

    public void Dispose()

Step 2:

Create an HTML helper extenstion method that creates the beginning tag and returns the object created in Step 1. You can use ViewContext.Writer to directly output the markup.

public static IDisposable BeginRow(this IHtmlHelper htmlHelper, string cssClass = "") {
    var writer = htmlHelper.ViewContext.Writer;
    writer.WriteLine(string.Format("<div class='row{0}'>", cssClass));
    return new RowContainer(writer);

Step 3

Use the helper in your Razor view with a using statement, just like BeginForm(). When the using statement disposes the returned object, it’ll close out the tag.

@using (Html.BeginForm()) {
// Form Fields go here

Additional Information

Full Code

OR/M Pain: Maybe Stored Procedures Aren’t So Bad

When I first started using OR/M, I looked forward to not writing boilerplate SQL code. As a lazy developer, I prefer to automate boilerplate code generation. After using OR/M for couple of years, I am beginning to miss stored procedures. OR/Ms like Entity Framework reduce the need for cookie cutter code, but they have some major flaws.

The first flaw is that OR/Ms are a leaky abstraction. The goal of any abstraction is to hide the internals of the thing you are trying to abstract. OR/Ms fail at this. Entity Framework, the OR/M I use the most, falls down on complex queries. For example, if you want to join in a related entity, you can use the Include() statement. The problem with Include() is that it generates horrendous queries that have terrible performance. You can’t do more than three or four includes in a single query. You end up having to either do a bunch of small queries or build a stored procedure. This defeats the purpose of OR/M.

The second flaw is that configuring complex relationships can be painful. I’ve used nHibernate (Fluent API) and Entity Framework (Code First,). Configuration in both OR/Ms is painful. I have spent hours trying to configure a particular database relationship. I’ve done small model changes generate migration scripts that left me scratching my head. One major advantage of Entity Framework is that the documentation is excellent. MSDN does a good job of highlighting common configurations, and there’s lots of information on the web.

The final flaw of OR/M is that you lose the ability to use a lot of features of the database. For example, until recently, you couldn’t create a unique key in Entity Framework. Entity Framework still doesn’t support database triggers. You can live without these features, but it does limit what you can do with OR/M.

This leads us to the obvious question:

Are OR/Ms a waste of time?

The answer, of course, is “umm… maybe”.

If you have a project with a simple data model or low performance requirements, OR/Ms will save you time. If your project is more complex, then you should consider skipping the OR/M. There’s nothing wrong with using stored procedures. Sometimes the old ways are the best ways.

More on OR/M Pain:
Bendyworks: Actually Using the Database ORM is an anti-pattern

Resources for learning ASP.NET MVC and Preparing for Exam 70-486

ASP.NET MVC is great, but one thing I’ve had trouble with is finding information. I’ve wasted many hours searching for documentation or solutions to specific problems. It’s much easier to find good documentation on ASP.NET Web Forms and JavaScript. This difficulty is compounded by the fact that I’m currently preparing to take Exam 70-486. I have found a number of useful resources to help other get up to speed on ASP.NET MVC.


Developing ASP.NET MVC4 Web Applications Jump Start

This is an eight part course that’s great for learning the basics of ASP.NET MVC. It’s high level, but I found it useful. The class is done by the Microsoft Virtual Academy, which has free videos on a large number of subjects.


Born To Learn: 486 Wiki

This site has a ton of information about MVC and the exam.

When I was primarily working in Web Forms, my first stop for development information was MSDN. For MVC, I find myself getting most of my information from Stack Overflow.


Programming ASP.NET MVC 4: Developing Real-World Web Applications with ASP.NET MVC

This is an excellent book that covers almost all practical aspects of building ASP.NET MVC applications. In addition to the basics, it includes information on architecture, optimization, build automation, and deployment. I reference this book often at work. I highly recommend it.

Exam Ref 70-486: Developing ASP.NET MVC 4 Web Applications

This book has proven to be less useful than the O’Reilly book above. This book covers all of the exam objectives, but some of the chapters are filler and reading this book alone will not give you enough information to pass the exam or build ASP.NET MVC applications. The previous book is a much better source of information.  I wouldn’t recommend it for anything other than prepping for the exam.

How I Passed 70-480: HTML5, JavaScript, CSS3

I recently passed Exam 70-480. Despite the lack of official study material and information regarding what was on the exam, I passed the exam. I am going to share what I did to study for the exam and list some tips so that you may have an easier time studying for this exam.

What’s on 70-480:

This exam primarily deals with web programming in JavaScript, HTML5, and CSS3. Much of the exam is focused on implementing HTML5 API’s such as Geolocation, Local Storage, and the Canvas.

A list of skills measured can be found here:

I found that the exam closely tracks the list of skills measured. I’ve taken a number of non-Microsoft exams and 70-480 is very straightforward. Most of the questions consist of a block of code and you need to select the proper code block to answer the question. You will need to read the question carefully and know the material, but there are no tricks.

Here’s the list of Microsoft Exam Question Types:

Most of the questions I ran into were multiple choice, repeated answer, and case studies.

My Study Guide for Passing the Exam:

I started learning web development in 2001, have been a professional web developer for over six years, and I’ve been tracking the technologies in this exam for several years. These are the things I did to study for the exam:

  1. I watched the 70-480 Jump Start Videos on the Microsoft Virtual Academy:

  2. I read this book:

    Training Guide: Programming in HTML5 with JavaScript and CSS3

  3. I went through each of the skills measured and made a code demo for each feature. I used a combination of local websites and This was the most useful of the three exercises. The best way to prep for this exam is to research and practice the exam objectives. You can not pass this test on concepts alone, you have to actually code.

Exam Tips:

  1. Read the questions very carefully. Many of the questions are very specific and the correct solution hinges on the wording of the question.
  2. Practice the exam objectives. All of the questions on the exam involved reasoning around code. You need to know how to actually write the code in order to pass this exam. This is not a purely conceptual exam.
  3. The Mozilla Developer Network is a great reference for HTML, JavaScript, and CSS. I used it constantly while preparing for the exam.