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

ASP.NET WebForm中Sweetalert2弹窗读取资源文件值失效如何解决

问题根源

ASP.NET WebForm 中<%$ Resources:XXX %>是属性级绑定表达式,只能作为服务器控件属性的完整独立值使用,不支持嵌入在属性值的字符串拼接片段中。你把资源表达式写在OnClientClick属性的JS函数参数位置,属于属性值内部的拼接内容,ASP.NET解析器不会识别这类写法,只会把表达式当普通文本原样输出,额外加单引号也绕不开这个语法限制。

解决方案

方案1:后台动态赋值(最稳定,优先推荐)

直接在页面后台的Page_Load事件中读取资源值,拼接完整的JS逻辑赋值给按钮的OnClientClick属性,完全避开前端表达式解析限制:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 读取全局资源值,如果是页面本地资源请用GetLocalResourceObject方法读取
        string deleteTitle = Resources.resource.SweetAlert_Delete_Title.ToString();
        string deleteText = Resources.resource.SweetAlert_Delete_Text.ToString();
        // 给JS字符串参数加单引号,同时转义文本中可能存在的单引号避免语法错误
        Btn_Delete.OnClientClick = 
            $"return sweetAlertConfirm(this, '{deleteTitle.Replace("'", "\\'")}', '{deleteText.Replace("'", "\\'")}');";
    }
}

前端按钮代码移除内联的OnClientClick资源拼接即可:

<asp:Button ID="Btn_Delete" CssClass="btn btn-danger" runat="server" 
     Text="Delete" 
     OnClick="Btn_Delete_Click" />

方案2:前端脚本绑定(无需写后台代码)

不要把资源表达式写在服务器控件属性内部,给按钮设置固定ClientID后,通过独立的JS脚本绑定点击事件,用<%= %>直接输出强类型资源值:

<%-- 给按钮设置静态ClientID,方便前端JS获取 --%>
<asp:Button ID="Btn_Delete" CssClass="btn btn-danger" runat="server" 
     Text="Delete" 
     OnClick="Btn_Delete_Click"
     ClientIDMode="Static" />

<script>
document.getElementById('Btn_Delete').addEventListener('click', function(e){
    e.preventDefault();
    return sweetAlertConfirm(
        this,
        '<%= Resources.resource.SweetAlert_Delete_Title.ToString().Replace("'", "\\'") %>',
        '<%= Resources.resource.SweetAlert_Delete_Text.ToString().Replace("'", "\\'") %>'
    );
})
</script>
避坑说明
  • 不要尝试在服务器控件的属性值内部嵌套<%$ Resources %>表达式,该语法天生不支持内联拼接场景
  • 所有传入JS的资源字符串必须做单引号转义,否则资源文本中出现英文单引号时会直接触发JS语法错误
  • 请确保自定义的sweetAlertConfirm逻辑正确:弹窗弹出时先返回false阻止按钮默认回发,用户点击确认后再手动触发回发,避免弹窗一闪而过直接执行后台删除逻辑
  • 如果使用的是页面本地资源(存放在App_LocalResources文件夹下),后台读取请调用GetLocalResourceObject("SweetAlert_Delete_Title")方法,前端<%= %>输出时调用GetLocalResourceObject即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 01:57:10