创建返回编码文本的辅助方法

时间:2016-07-13 09:40:43

标签: c# asp.net-mvc

我已经创建了一个像这样的HTML帮助方法

  public static class abcExtensions
  {
    public static string Label1(this HtmlHelper helper, string target, string text)
    {
        return String.Format("<label for='{0}'>{1}</label>", target, text);

    }
}

但我会像

一样使用它
@Html.Label1(..)

它呈现像这样的编码文本

  

&lt; label for ='aa'&gt; qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq&lt; / label&gt;

我不想使用@ Html.Raw

如何渲染Html而不是编码文本?

2 个答案:

答案 0 :(得分:3)

你需要返回IHtmlString,它返回Html-Encoded字符串,如;

public static IHtmlString Label1(this HtmlHelper helper, string target, string text)
{

   return new HtmlString(String.Format("<label for='{0}'>{1}</label>", target, text));

}

HtmlString包装一个假定不需要HTML编码的字符串。它实现IHtmlString,因此在调用HttpUtility.HtmlEncode(htmlString)时,字符串不会被编码。

您也可以看到这个post,它解释了您何时应该使用HtmlString说明的更多内容:

  

你应该记住的是剃刀在默认情况下对所有内容进行编码,但是通过在你的html助手中使用MvcHtmlString,你可以告诉剃刀它不需要对其进行编码

如果您有兴趣了解其工作原理,也可以随时查看the source code

答案 1 :(得分:0)

让你的帮助方法返回一个HtmlString而不是字符串。

https://msdn.microsoft.com/en-us/library/system.web.htmlstring(v=vs.110).aspx