在 ASP.NET Razor 中格式化字符串

Posted

技术标签:

【中文标题】在 ASP.NET Razor 中格式化字符串【英文标题】:Formatting strings in ASP.NET Razor 【发布时间】:2011-03-21 10:59:41 【问题描述】:

我目前正在用 ASP.NET 编写一个小型模板系统,以允许用户添加内容。例如,用户可以输入字符串(变量类型为字符串)。

topHeader[x] = "They think it's all over. It is now!";

但是,需要进行的一项更改是能够在此内容中添加一些基本的 html 标记,因此可以完成以下操作

topHeader[x] = "They think it's all over. <strong>It is now!</strong>";

topHeader[x] = "They think it's all over. <a title="Football News" href="URL">It is now!</a>";

如果您现在将这些内容添加到字符串中,它们不会被格式化为 HTML,但我想以某种方式转义它们以便它们可以。当然,我已经在 Internet 上寻找答案,但由于 Razor 相当新,所以没有太多可以帮助我的方法。

有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

您需要创建一个 IHtmlString 实现来保存您的 HTML 源代码。

Razor 计划有一个辅助方法来为你做这件事,但是,AFAIK,它还没有,所以我相信你需要创建自己的类来实现接口并返回你的 HTML GetHtmlString() 方法。编辑:您可以使用 HtmlString 类。

您可以更改您的 topHeader 字典以保存 IHtmlStrings 而不是 Strings,或者您可以保留您的代码,但在 Razor 视图中将其包装在 HtmlString 中:

<tag>@new HtmlString(topHeader[x])</tag>

确保正确转义所有非 HTML 特殊字符。

【讨论】:

【参考方案2】:

他们添加的辅助方法称为Html.Raw(),它更简洁

这是一个例子:

@Html.Raw("Hello <a>World</a>!")

【讨论】:

这就像一个魅力!而且它比提供的其他答案更容易。【参考方案3】:

SLaks 是对的,但是您不需要编写自己的 IHtmlString 实现,System.Web 内置了一个称为 HtmlString 的实现。所以:

topHeader[x] = new HtmlString("They think it's all over. <a title=\"Football News\" href=\"URL\">It is now!</a>");

应该做的伎俩。

【讨论】:

我试过这个,但收到“CS0029:无法将类型'System.Web.HtmlString'隐式转换为'string'”知道我做错了什么吗? @EnderMB:将字典更改为包含IHtmlStringobject

以上是关于在 ASP.NET Razor 中格式化字符串的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net core razor 视图未格式化

在 ASP.NET 核心中解析 Razor 字符串

asp.net MVC Razor 文本框控件验证

在 ASP.NET 5 中将 Razor 视图呈现为字符串

ASP.NET Razor——ASP.NET Razor - C#代码语法

在 ASP.NET Core 中将 Razor 视图渲染为字符串