Custom html helpers: Create helper with “using” statement support

Here is a possible reusable implementation in c# :

class DisposableHelper : IDisposable
{
    private Action end;

    // When the object is created, write "begin" function
    public DisposableHelper(Action begin, Action end)
    {
        this.end = end;
        begin();
    }

    // When the object is disposed (end of using block), write "end" function
    public void Dispose()
    {
        end();
    }
}

public static class DisposableExtensions
{
    public static IDisposable DisposableTr(this HtmlHelper htmlHelper)
    {
        return new DisposableHelper(
            () => htmlHelper.BeginTr(),
            () => htmlHelper.EndTr()
        );
    }
}

In this case, BeginTr and EndTr directly write in the response stream. If you use extension methods that return a string, you’ll have to output them using :

htmlHelper.ViewContext.HttpContext.Response.Write(s)

Leave a Comment