如何在SweetAlert弹窗中正确使用@Html.Raw显示控制器传递的HTML内容
问题1:SweetAlert中展示格式化HTML内容
你当前用title字段传递HTML,但SweetAlert默认会转义HTML源码,需要改用html选项来渲染解析后的内容,同时要避免字符串引号破坏JS结构:
控制器代码保持不变:
ViewBag.message = "<h3> Something went terribly wrong, please try again or contact us at <a href='mailto:info@abc.we'>info@abc.we</a> </h3>";
修改视图代码:
<script type="text/javascript"> $(function () { swal({ html: "@Html.Raw(HttpUtility.JavaScriptStringEncode(ViewBag.message))", icon: "success", button: "Ok", }); }); </script>
HttpUtility.JavaScriptStringEncode会处理HTML内容里的引号,避免破坏JS字符串格式html选项是SweetAlert专门用来渲染HTML的参数,不会转义内容
如果使用的是SweetAlert2,写法完全一致,同样用html属性替代title/text。
问题2:ViewBag传递的JS代码无法执行
你的核心逻辑没问题,只需调整细节确保代码正确输出和执行:
控制器代码保持不变:
ViewBag.htmlmsg = "alert('asd');";
修改视图代码:
<script> $(document).ready(function () { @Html.Raw(ViewBag.htmlmsg) }); </script>
- 不要在
@Html.Raw后额外加分号,因为你的ViewBag内容已经自带分号 - 若仍不执行,先确认jQuery已在该脚本之前引入(否则
$(document).ready不会触发),也可以去掉DOM就绪事件测试:
<script> @Html.Raw(ViewBag.htmlmsg) </script>
如果这样能弹出提示,说明是jQuery加载顺序或DOM就绪时机的问题,调整jQuery引入位置即可。
内容的提问来源于stack exchange,提问作者PHioNiX
相关产品推荐
相关产品推荐

