.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
相关产品推荐
相关产品推荐

