在 C# Razor 中将字符串呈现为 HTML

Posted

技术标签:

【中文标题】在 C# Razor 中将字符串呈现为 HTML【英文标题】:Render a string as HTML in C# Razor 【发布时间】:2015-02-01 18:49:11 【问题描述】:

我正在尝试从我的模型中呈现地址。该字符串包含我用中断标记替换的换行符。虽然,它在页面上呈现为字符串而不是 html。如何强制我的字符串呈现为 HTML?

尝试:

<span id="addressLine">
    @Model.MyData.Address.Replace("\r\n", "<br />");
</span>

页面上的结果:

Address Top<br />Street Name<br />City<br />PostCode

应显示为:

Address Top
Street Name
City
PostCode

【问题讨论】:

你应该拆分字符串。 @DanielA.White - 对不起,伙计,第一天使用 C#。所以我应该将它拆分并保存为不同的变量并在不同的行上渲染它们? 使用@Html.Raw(Model.MyData.Address.Replace("\r\n", "&lt;br /&gt;")) @Dom - 干杯,工作完美。发布为答案。 &lt;br/&gt;&lt;span&gt; 内?畏缩! 【参考方案1】:

使用 css 保留空白

HTML

<div id="addressLine">
  @Model.MyData.Address;
</div>

CSS

#addressLine 
  white-space: pre;

【讨论】:

您也可以使用默认具有此空白行为的&lt;pre&gt; 标签。例如。 &lt;pre&gt;Model.MyData.Address&lt;/pre&gt;。见w3schools.com/tags/tag_pre.asp。此外,您不应该使用HtmlRaw,它仅在 Model.MyData.Address 包含要包含在输出中的文字 HTML 时使用而不转义。 这个答案也更好,因为你不再需要使用Html.Raw 这个答案只是关于 css,而不是关于 html 编码或像剃刀一样呈现 html。这发生在服务器端,在这种情况下与 css 关系不大。【参考方案2】:

使用@Html.Raw(Model.MyData.Address.Replace("\r\n", "&lt;br /&gt;"))

【讨论】:

小心使用这个,如果用户的地址是1234 &lt;script&gt;alert('a')&lt;/script&gt; lane,就会有xss问题 @JohnKoerner - 别担心,我们会清除所有内容并格式化地址,然后再将其保存到数据库中。不过感谢您的提醒。 这不再是最佳答案。下面的几个答案使用避免使用Html.Raw 的CSS/HTML 策略。换行符的问题是 CSS/HTML 问题,现代浏览器可以控制(使用 CSS/HTML)以按照您的意愿行事。【参考方案3】:

您应该使用 CSS whitespace 属性来代替它。 更多详情,请访问http://www.w3schools.com/cs-s-ref/pr_text_white-space.asp

它还可以帮助您避免跨站点脚本 (http://en.wikipedia.org/wiki/Cross-site_scripting)

【讨论】:

【参考方案4】:

使用

@(new HtmlString(@Model.MyData.Address))

更安全,让您避免潜在的 xss 攻击

看到这个帖子: Rendering HTML as HTML in Razor

【讨论】:

如何避免潜在的 xss 攻击?它只是一个字符串的包装,表示当在视图上使用时,内容不应被编码,因此任何不受信任的内容都将显示为与 Html.Raw 相同。【参考方案5】:

要在 blazor 上呈现 HTML,您可以使用 MarkupString => @((MarkupString)here your string) 这会将字符串呈现为 HTML

<span id="addressLine">
    @((MarkupString)@Model.MyData.Address.Replace("\r\n", "<br />"));
</span>

【讨论】:

以上是关于在 C# Razor 中将字符串呈现为 HTML的主要内容,如果未能解决你的问题,请参考以下文章

C#:如何在 Blazor Wasm 托管中将动态 Razor 组件从服务器发送到客户端?

以编程方式将 Razor 页面呈现为 HTML 字符串

在 asp.net mvc razor 应用程序中将 Datetime C# 类型转换为 Date javascript

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

从 Core 3 的类库中的渲染/处理的 Razor 页面中将 html 作为字符串返回

为啥 .Mobile.cshtml 未在 ASP.NET Core C# Razor Pages Web 应用程序中呈现?