MvcHtmlString.Create()方法不返回HTML编码的字符串

时间:2019-05-10 10:04:52

标签: html asp.net-mvc encoding

我必须在这里丢失一些东西,因为this doc

说,MvcHtmlString.Create("someStringHere")返回html编码的字符串,但是如果我有类似MvcHtmlString.Create("<h1>myHeading</h1>")的内容,它仍显示为

myHeading

(作为标题),而不是编码文字&lt;h1&gt;myHeading&lt;/h1&gt;

那那句话的意思

  

MvcHtmlString.Create(String)
  使用指定的文本值创建一个HTML编码的字符串。

我无法理解,如果有人可以解释文档的含义,以及他们试图引用的编码与html编码之间的区别是什么,将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

我同意文档似乎误导了MvcHtmlString

但是,MvcHtmlString用于希望字符串进行HTML编码的情况。剃刀的默认行为是对输出进行编码。

您传递给它的HTML字符串应该已经被编码,以确保输出时不需要其他编码。

因此,假设使用以下HTML帮助器:

public static class HtmlHelper
{     
    public static string GetHtmlString(this System.Web.Mvc.HtmlHelper htmlHelper)
    {
        return "<h1>myHeading</h1>";
    }

    public static MvcHtmlString GetMvcHtmlString(this System.Web.Mvc.HtmlHelper htmlHelper)
    {
        return MvcHtmlString.Create("<h1>myHeading</h1>");
    }
}

在“剃刀”视图中:

@Html.GetHtmlString()
@Html.GetMvcHtmlString()

输出为:

&lt;h1&gt;myHeading&lt;/h1&gt

myHeading