Search code examples
asp.net-mvc-2html-helpermvchtmlstring

How to concatenate several MvcHtmlString instances


I have some doubts about how to concatenate MvcHtmlString instances because of this information found in MSDN :

MvcHtmlString Class Represents an HTML-encoded string that should not be encoded again

Do I risk that strings are HTML-encoded twice when using code like this:

var label = Html.LabelFor(model => model.Email);
var textbox = Html.TextBoxFor(model => model.Email);
var validation = Html.ValidationMessageFor(model => model.Email);

var result = MvcHtmlString.Create(
  label.ToString() + textbox.ToString() + validation.ToString());

(note: this is supposed to go into an HtmlHelper extension method to reduce code-duplication in views).


Solution

  • Your code is correct.

    That snippet from MSDN means that an encoding View Engine (such as the Aspx view engine in .NET 4 when using <%: %> or the Razor view engine in MVC 3) should not re-encode the string value of the object.

    So for example:

    string s = "<tag>";
    var hs = MvcHtmlString.Create(s);
    
    <%: s %>  -- outputs "&lt;tag&gt;"
    <%: hs %> -- outputs "<tag>"