vote up 0 vote down
star
1

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?

flag

3 Answers

vote up 5 vote down

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.

link|flag
Very nice use of extension methods... – JPrescottSanders Oct 10 at 18:51
vote up 0 vote down

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']) %>
link|flag
vote up 0 vote down

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.

link|flag

Your Answer

Get an OpenID
or

Not the answer you're looking for? Browse other questions tagged or ask your own question.