自定义HtmlHelper呈现文本而不是标记

Jas*_*ord 18 asp.net-mvc html-helper asp.net-mvc-3

我写了一个基本的HtmlHelper.这是我写的一个测试,它简化了我正在做的事情并提供自我保证,当我使用StringBuilderTagBuilder对象时它发生了:

public static string HelloWorld(this HtmlHelper htmlHelper, string name)
{
    var sb = new StringBuilder();
    var builder = new TagBuilder("span");
    builder.InnerHtml = "Hello, " + name + "!";
    sb.Append(builder.ToString(TagRenderMode.Normal));
    sb.Append("<br/>");

    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

此控件的输出对字符串进行编码,因此我看到以下内容: <span>Hello, Jason!</span><br/>

在我看来,我使用以下内容: @Html.HelloWorld("Jason")

我有什么想法可以做错吗?

Str*_*ior 23

Razor引擎默认在其呈现的任何字符串中转义HTML.如果将返回类型更改为IHtmlString,则不会发生这种情况.

public static IHtmlString HelloWorld(this HtmlHelper htmlHelper, string name)
    ...
    return new HtmlString(sb.ToString());
}
Run Code Online (Sandbox Code Playgroud)