views:

508

answers:

3

I am currently in the process of making a new ASP.net MVC website, and find myself using Html.Encode all over the place, which is good practice, but gets pretty messy. I think a good way to clean this up would be if I could overload an operator to automatically do Html encoding.

Previously:

<%= Html.Encode( ViewData['username'] ) %>

Would be equivalent to:

<%=h ViewData['username'] %>

Anyone have any ideas how I could do this, maybe using an extension method or something?

A: 

NOTE: This is an ugly and untested hack, I don't think I'd ever do this

public static String h (this System.Object o, System.Object viewData)
{
    return Html.Encode(viewData);
}

I'm not sure what type ViewData is, so I used Object here, it would be best to actually change the type in the real code.

this works by hanging an extension method off System.Object, so it is always available on all types...ugly, but it may do the job:

<%=h(ViewData['username']) %>
FlySwat
You should be ashamed of yourself!
bzlm
A: 

Thanks Jonathan.

I tried it out and it wouldn't work on any of the views, although the extension method was accessible through a controller. I'll have to keep playing around with it or maybe wait for an epiphany.

By the way, the method should return a String and also it's parameter should be a String.

Jared
+5  A: 

It's not so clean as an operator overload, but I used the following extension method:

public static string Safe(this string sz)
{
    return HttpUtility.HtmlEncode(sz);
}

So in my aspx id do:

<%= this.ViewData["username"].Safe() %>

Tacking the extra method onto the end of the expression just looks prettier to me than sending the value through a function.

Wyatt
Very nice use of extension methods...
JPrescottSanders