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

ASP.NET的aspx页面中开头带0的字符串在jQuery确认框中异常转换问题

异常触发原因

你遇到的两类异常本质都是服务端渲染的Reference字段值没有被包裹为JavaScript字符串字面量,直接被当做JS代码片段解析执行导致的:

  • 当Reference为带前导0的全数字内容时,JS会默认将前导0开头的数字识别为八进制数值:0003转十进制为3,03030转十进制恰好为1560,和你遇到的转换结果完全匹配。
  • 当Reference包含字母时,渲染后的JS代码会把这段内容识别为变量名,查找不到对应变量就会抛出未定义异常,直接打断后续代码执行,导致确认弹窗无法弹出。

你在<h1>标签中渲染正常是因为HTML中直接输出字符串内容不需要符合JS语法规则,两类场景的渲染上下文完全不同。

可行解决方案

提供两种落地成本低且兼容性好的方案:

方案1:服务端渲染时转义为合法JS字符串

在输出Reference的位置增加引号包裹,同时用ASP.NET内置的HttpUtility.JavaScriptStringEncode方法处理JS特殊字符转义,避免内容中包含引号、换行等字符打断字符串结构:

$('#btDelete').click(function(e) {
  e.preventDefault();
  $.confirm({
    'title': 'Delete',
    // 核心改动:增加单引号包裹+JS字符串转义
    'message': "You will delete the object <i>" + '<%: HttpUtility.JavaScriptStringEncode(Model.Reference) %>' + "</i>. Do you want to continue?",
    'buttons': {
      'Si': {
        'class': 'blue',
        'action': function() {
          //some code to make the delete
        }
      },
      'No': {
        'class': 'gray',
        'action': function() {}
      }
    }
  });
});

方案2:通过DOM属性传递值(更推荐)

避免直接在JS代码中拼接服务端渲染内容,将值存在按钮的自定义data属性中,JS侧直接读取DOM属性值:
首先修改删除按钮的aspx代码,增加data属性:

<button id="btDelete" data-reference="<%: Model.Reference %>">删除</button>

再修改JS逻辑读取属性:

$('#btDelete').click(function(e) {
  e.preventDefault();
  // 直接读取DOM属性值,自动处理编码问题
  const reference = $(this).data('reference');
  $.confirm({
    'title': 'Delete',
    'message': "You will delete the object <i>" + reference + "</i>. Do you want to continue?",
    'buttons': {
      'Si': {
        'class': 'blue',
        'action': function() {
          //some code to make the delete
        }
      },
      'No': {
        'class': 'gray',
        'action': function() {}
      }
    }
  });
});

该方案完全规避了服务端拼接JS代码的语法风险,后续维护也更灵活。

内容的提问来源于stack exchange,提问作者Keras-JOB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:54:02