自定义 HtmlHelper 呈现文本而不是标记
我写了一个基本的HtmlHelper。这是我编写的一个测试,它简化了我正在做的事情,并确保当我使用 StringBuilder
和 TagBuilder
对象时会发生这种情况:
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();
}
此控件的输出对字符串进行编码所以我看到以下内容: 你好,Jason!
在我看来,我正在使用以下内容:@Html.HelloWorld("Jason")< /code>
有什么想法我可能做错了吗?
I have written a basic HtmlHelper. Here's a test I wrote that simplifies what I was doing and to provide self assurance that it is happening when I use StringBuilder
and TagBuilder
objects:
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();
}
The output for this control encodes the string so I see the following:<span>Hello, Jason!</span><br/>
In my view, I'm using the following: @Html.HelloWorld("Jason")
Any ideas what I can be doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
默认情况下,Razor 引擎会在其呈现的任何字符串中转义 HTML。如果将返回类型更改为
IHtmlString
,则不会发生这种情况。The Razor engine escapes HTML by default in any strings that it renders. If you change the return type to
IHtmlString
, this won't happen.您的静态方法必须是
HtmlString
而不是string
,并且您必须返回HtmlString(sb.ToString());
Your static method must be
HtmlString
instead ofstring
, and you must return theHtmlString(sb.ToString());
使用
AppendFormat
而不是Append
Use
AppendFormat
instead ofAppend
这是 2018 年使用 .Net Core 2 的答案
Here is an answer for the year 2018 working with .Net Core 2