ASP.Net从哪里获取其呈现的ID?

Nei*_*ilD 2 javascript asp.net rendering

我继承了一个项目,其中包含一些依赖于硬编码对象ID的讨厌的JavaScript.
即有很多地方可以做这样的事情

var magazine = document.getElementById('repModuleDisplay__ctl3_chkCats_0');
Run Code Online (Sandbox Code Playgroud)

当页面在我的UAT环境中呈现时,HTML看起来像这样,一切正常.

<input id="repModuleDisplay__ctl3_chkCats_0" 
    type="checkbox" name="repModuleDisplay:_ctl3:chkCats:0"  
    ... etc
Run Code Online (Sandbox Code Playgroud)

但是,当我把它放在我的生产环境中时,HTML会突然像这样:

<input id="repModuleDisplay_ctl03_chkCats_0" 
    type="checkbox" name="repModuleDisplay$ctl03$chkCats$0" 
    ... etc
Run Code Online (Sandbox Code Playgroud)

ids的不同意味着JavaScript无法找到Element,并且失败了.

在一个理想的世界里,我会删除错误的JavaScript并再次正确地执行它,但是为了快速修复,我想知道是什么导致两个环境之间的渲染差异.

有没有人有任何想法?

谢谢,尼尔

Luk*_*keH 7

我能想到的最快最简单的修复 - 如果代码遍布整个地方可能不是特别快速或简单 - 就是使用ClientID控件的实际属性而不是试图猜测生成的id可能是什么:

// i've assumed that the control is named chkCats
var magazine = document.getElementById('<%= chkCats.ClientID %>');
Run Code Online (Sandbox Code Playgroud)