You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Razor中正确渲染动态HTML内容?

解决Razor Pages中HTML内容被转义的问题

Razor默认会对字符串输出做HTML编码,所以直接用@Model.Message会把HTML标签转成编码字符,无法渲染预期结构。可以通过以下两种方式解决:

方法一:使用Html.Raw()输出原始HTML

在你的index.cshtml里,将原来的@Model.Message替换成:

@Html.Raw(Model.Message)

Html.Raw()会告诉Razor跳过编码,直接渲染传入的HTML内容。

注意事项

如果HTML内容来自不可信来源(比如用户提交内容、第三方接口数据),直接使用Html.Raw()会存在XSS攻击风险,需要先对HTML内容进行安全清理(比如用专门的HTML清理库过滤危险标签和属性)。如果是自己控制的内容(本地静态文件、自行生成的数据库HTML),可以安全使用。

方法二:将属性类型改为IHtmlContent

在你的PageModel子类中,把Message的类型从string改为IHtmlContent,赋值时用HtmlString包装HTML文本:

using Microsoft.AspNetCore.Html;

public class IndexModel : PageModel
{
    public IHtmlContent Message { get; set; }

    public void OnGet()
    {
        // 读取本地HTML文件内容
        var htmlContent = System.IO.File.ReadAllText("UnderConstruction.html");
        // 用HtmlString包装,标记为无需编码的HTML内容
        Message = new HtmlString(htmlContent);
    }
}

之后在index.cshtml里直接使用@Model.Message即可,Razor会识别这是已处理的HTML内容,不会进行转义。

数据库读取HTML的适配

后续从数据库读取并生成HTML内容时,上述两种方法同样适用:

  • 若用方法一,直接把数据库读取到的HTML字符串传入Html.Raw();
  • 若用方法二,将数据库读取的字符串包装成HtmlString赋值给IHtmlContent类型的属性。
    同样要注意内容的安全性,不可信内容必须先做安全清理。

内容的提问来源于stack exchange,提问作者user9778277

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:50:39