
在ASP.NET Web Forms中,用户控件(UserControl)内的JavaScript/jQuery常因服务器端ID重命名机制失效——ASP.NET会自动修改runat="server"控件的id属性(如txtP_PERM_ID变为UC_ProjectsDashboard1_txtP_PERM_ID),导致前端选择器匹配失败。
在asp.net web forms中,用户控件内的javascript/jquery常因服务器端id重命名机制失效——asp.net会自动修改`runat="server"`控件的`id`属性(如`txtp_perm_id`变为`uc_projectsdashboard1_txtp_perm_id`),导致前端选择器匹配失败。
当在用户控件(.ascx)中直接使用 $("#txtP_PERM_ID") 这类硬编码ID选择器时,jQuery 会在DOM中查找原始ID名,但ASP.NET在渲染页面时会为所有 runat="server" 控件自动生成唯一、嵌套式的客户端ID(ClientID),例如:
- 原服务端控件
- 实际输出HTML可能为:
因此,$("#txtP_PERM_ID") 返回空jQuery对象,val() 调用始终为 undefined,后续条件判断(如 == "2059")自然不成立,GET_ITO_PROJECTS_DASHBOARD() 函数也就不会执行。
✅ 正确做法:在用户控件的 <script></script> 块中,使用 动态获取真实客户端ID:
jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。
<script>
$(function () {
// ✅ 正确:服务端表达式生成实际渲染后的ID
var permId = $("#<%= txtP_PERM_ID.ClientID %>").val();
if (permId === "2059") {
GET_ITO_PROJECTS_DASHBOARD();
}
});
</script>
⚠️ 注意事项:
- 该语法
仅在.ascx或.aspx文件内有效,不可用于外部.js文件(因外部JS不经过ASP.NET编译); - 若
txtP_PERM_ID是纯前端元素(未加runat="server"),则无需ClientID,但需确保其ID在DOM中确实存在且唯一; - 推荐将初始化逻辑封装为独立函数,并在
$(document).ready()或Page_Load后明确触发,避免执行时机问题; - 如需复用脚本,可考虑通过
data-*属性传递ClientID(如),再由JS读取,提升可维护性。
? 补充建议:
若 GET_ITO_PROJECTS_DASHBOARD 是自定义函数,请确认它已在全局作用域声明(如定义在 <script></script> 中或已引入的JS文件里),且无语法错误;同时建议在浏览器F12控制台检查是否报错(如 ReferenceError 或 TypeError),这是快速定位脚本未执行的关键线索。










