EditorBlockFor HTML helper

In ASP.NET MVC, Microsoft has done a great job with the various HTML helpers that can be used in a form context, such as LabelFor, EditorFor, ValidationMessageFor etc.

However, despite these helpers, the HTML markup still tend to become rather tedious and repetitive. For instance, this HTML generates a form that can be used t0 create groups in a web application that I am currently working on:

    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.CollectionName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CollectionName)
            @Html.ValidationMessageFor(model => model.CollectionName)
        </div>

        <div class="form-buttons">
            <input type="submit" value="@this.GlobalResource(Resources.Language.Create)" />
        </div>
    }

That is quite a lot of code for handling two single properties…and the two editor blocks look rather similar, don’t you think?

I therefore decided to write a small HTML helper extension method – EditorBlockFor – that can be used to generate an editor block (label, editor and validation message).

Using this new helper, the resulting form becomes a lot shorter and a lot easier to handle:

    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(true)
        @Html.EditorBlockFor(model => model.Name);
        @Html.EditorBlockFor(model => model.CollectionName);

        <div class="form-buttons">
            <input type="submit" value="@this.GlobalResource(Resources.Language.Create)" />
        </div>
    }

As you see, the method is only to be used if you want to follow the conventions that are used for auto-generated ASP.NET MVC form code. But if you do…you can save a lot of keystrokes.

I am not that familiar with the MvcHtmlString type, which the native methods return, so returning an IHtmlString instead of MvcHtmlString could be a big no no that I do not know about.

Please let me know if I have ruined the order of the universe.