从html帮助程序中取出未编码的html

时间:2018-05-26 17:08:18

标签: c# asp.net asp.net-mvc razor razorengine

这些年来有很多答案,在有人对我大喊之前,我已经尝试过所有这些并且无法工作。我使用MVC 5,Razor 3,Visual Studio 2017.这是一个简化的测试:

在我的App_Code文件夹中,我有一个SSLhelpers.cshtml文件,其中包含:

@helper Macro(string Htext, string Ptext)
{
    <h2>@Htext</h2>
    <p>@Ptext</p>
}

在我看来,我有:

@SSLhelpers.Macro("This is my header", "This is my paragraph text. We should 
be <strong>bold</strong> here but we're not.")

生成的html是:

<h2>This is my header</h2>

<p>This is my paragraph text. We should be &lt;strong&gt;bold&lt;/strong&gt; 
here but we're not.</p>

如何避免编码?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以像这样使用HtmlString

@helper Macro(string Htext, string Ptext)
{
    <h2>@(new HtmlString(Htext))</h2>
    <p>@(new HtmlString(Ptext))</p>
}

答案 1 :(得分:1)

创建自定义助手(在视图中引用的命名空间):

    public static HtmlString TestHtmlString(this HtmlHelper html, string hText, string pText)
    {
        var h = new TagBuilder("h2");
        var p = new TagBuilder("p");
        h.InnerHtml = hText;
        p.InnerHtml = pText;
        return new HtmlString(h.ToString(TagRenderMode.Normal) + p.ToString(TagRenderMode.Normal));
    }

然后你可以在你的视图中使用它:

@Html.TestHtmlString("This is my header", "This is my paragraph text. We should be <strong> bold </strong> here but we're not.")