You need to enable JavaScript to run this app. ASP.NET MVC中使用Html.Raw时如何运行Html与Url辅助方法
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中使用Html.Raw时如何运行Html与Url辅助方法

核心问题原因

Razor引擎的语法解析与代码生成发生在视图的编译阶段,Html.Raw仅负责将传入的字符串解除HTML编码后直接输出,不会对运行时动态拼接的字符串做二次Razor语法解析。
原示例的错误本质是:将@Url.Asset(...)完整写在C#字符串的双引号字面量内部,这部分内容从语法层级就属于普通文本,完全脱离Razor引擎的解析范围,因此会被原样当字符串输出到页面。

可行调整方案
  • 存储内容层剥离Razor语法,不在数据库、动态字符串中嵌入Razor标记
    存储HTML片段时用自定义占位符替代需要动态生成的辅助方法逻辑,在视图执行的上下文中完成占位符替换,示例:
    @{
        // 从数据库读取的原始HTML片段(无内嵌Razor语法)
        var storedHtml = "<img src=\"__ASSET_ROOT__/img/banner-example.png\">";
        // 调用当前上下文的Url辅助方法,替换占位符为真实资源路径
        var finalHtml = storedHtml.Replace("__ASSET_ROOT__", Url.Asset("").ToString());
    }
    @Html.Raw(finalHtml)
    
  • 视图内临时拼接动态HTML时,将Razor辅助调用从字符串引号中剥离,通过字符串拼接组合内容,不要把Razor标记写在字符串字面量内,原示例的修正写法:
    @{
        var html = "<img src=\"" + Url.Asset("img/banner-example.png") + "\">";
    }
    @Html.Raw(html)
    
  • 若业务必须支持存储带动态执行逻辑的模板,不建议做简单的字符串匹配替换,应使用独立的Razor模板引擎(如RazorLight)完成运行时模板编译:
    1. 将数据库读取的模板字符串作为编译输入
    2. 把Url、Html辅助方法实例注入模板执行上下文
    3. 由引擎完成模板内所有Razor标记的解析执行,拿到最终纯HTML字符串后再输出

    安全提示:这类运行时编译会让存储的模板内容获得和当前视图同等的代码执行权限,仅在100%信任存储内容来源的场景下使用,否则会引入严重的代码注入、XSS安全风险。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 22:24:03