在使用母版页的时候,发现源文件控件元素的ID和生成HTML文件的ID不一致。表单from的name属性和id属性变成了aspnetForm,控件的id属性被无缘无故了加上了ctl00_ContentPlaceHolder1_前缀,其name属性也加上了ctl00$ContentPlaceHolder1$前缀,在使用javascript的时候就无法正确获得ID值进行下一步操作,如何解决这个问题呢?下面介绍在母版页显示系统时间为例进行说明。步骤如下:
- //javascript获得系统时间代码
<script language="javascript">
function show()
{
var t;
//获得系统当前时间
t=new Date();
var s;
//获得时
s=t.getHours()+":";
//获得分
s+=t.getMinutes()<10?"0"+t.getMinutes():t.getMinutes();
s+=":";
s+=t.getSeconds()<10?"0"+t.getSeconds():t.getSeconds();
document.getElementById('<%= Label1.ClientID %>').innerText=s;
setTimeout("show()",500)
}
</script>
2. 在母版页的body里面修改如下,使其载入时发生:
<body οnlοad="show()">
//为System.Web.UI.WebControls.TextBox 服务器端控件
<asp:Label ID="Label1" runat="server"></asp:Label>
备注:document.getElementById('<%= Label1.ClientID %>').innerText=s;为技术关键点,为获得客户端的id,就需要用Label1.ClientID
由于种种原因(比如使用了MasterPage,或者GridView中的模版列),一个控件在设计时的ID往往不同于生成页面后的ID,为了获得控件客户端ID,我们可以从生成的页面入手,取控件id有以下三种修改方法:
document.getElementById("ctl00$编辑区ID$控件ID");
document.getElementById("ctl00_编辑区ID_控件ID");
document.getElementById("<%= 编辑区ID_控件ID.ClientID %>");
【上面前两个方法的“ct100”都是客户端生成的代码,我们只要改变原来的值就可以了,比如本例js代码可以改成这样:document.getElementById('ctl00_Label1').innerText=s;同样可以实现】