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

.NET Core 2.2 MVC中向插件传递HTML字符串转义问题求助

解决.NET Core MVC中HTML字符串传递时的转义问题

嘿,早上好!很高兴能帮你搞定这个问题~你遇到的核心麻烦是ASP.NET Core MVC默认会对输出的字符串做HTML编码,再加上你手动写了转义后的实体(<、>这些),导致插件拿到的是双重转义的内容,自然没法正常解析成可交互的HTML元素。

下面给你几个具体的解决步骤:

1. 先修正HTML字符串的写法

别再手动写转义后的实体了,直接用原始HTML语法就行,注意引号的转义(用逐字字符串@的话,双引号要写两个):

string ss = @"<a id=""myID"" onclick=""cEdit('var1','var2')"">Display Text</a>";

这里把onclick里的双引号换成单引号,既能避免和外层的双引号冲突,也能让JavaScript函数正常识别参数。

2. 告诉框架这是安全的HTML,不要自动编码

ASP.NET Core为了防止XSS攻击,默认会对所有输出的字符串进行编码。你需要明确标记这个字符串是安全的HTML:

方法一:在控制器中使用HtmlString

把rtnChild.name的类型改成IHtmlString(如果你的OrgChild模型里name字段是string,直接用HtmlString包装即可):

using Microsoft.AspNetCore.Html; // 需要引入这个命名空间

// ... 其他代码 ...
string ss = @"<a id=""myID"" onclick=""cEdit('var1','var2')"">Display Text</a>";
rtnChild.name = new HtmlString(ss);

这样框架在输出这个字符串时,就不会自动编码了。

方法二:在视图中使用Html.Raw()

如果是在Razor视图里把这个值传递给插件,可以用Html.Raw()跳过编码:

// 假设插件是这样接收参数的
<script>
    initPlugin({
        name: @Html.Raw(Model.name)
    });
</script>

3. 验证效果

做完上面的修改后,插件拿到的就是你期望的原始HTML字符串:<a id="myID" onclick=cEdit("var1","var2")>Display Text</a>,点击链接时也能正常触发cEdit函数弹出提示框。

⚠️ 小提醒:如果这个HTML字符串包含用户输入的内容,一定要先做XSS过滤,避免安全风险!如果是你自己生成的固定内容,就不用担心啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:53:43