以下代码无效。标记位于用户控件中,我想这就是 ClientID 为 TextBox id 返回错误前缀的原因。
标记:
<INPUT id="txtName" runat="server" maxlength="50" style="WIDTH:100px">
<INPUT type="button" value="Find Your Doctor" id="btnFind" runat="server"
style="MARGIN-LEFT:10px;WIDTH:130px">
代码隐藏:
btnFind.Attributes.Add("onClick",string.Format("DoctorLink
('{0}',document.getElementById('{1}').value,{2});",
row["ZipCode"],
txtName.ClientID));
浏览器中的结果:
<input name="DoctorsMainArea1$ctl01$txtName" type="text"
id="DoctorsMainArea1_ctl01_txtName" maxlength="50" style="WIDTH:100px" />
<input name="DoctorsMainArea1$ctl01$btnFind" type="button"
id="DoctorsMainArea1_ctl01_btnFind" value="Find Your Doctor" style="MARGIN-
LEFT:10px;WIDTH:130px" onClick="PrepareDoctorLink('90210',
document.getElementById('DoctorsMainArea1_ctl00_txtName').value);" />
如您所见,JavaScript 调用的参数是 DoctorsMainArea1_ctl00_txtName
,但输入元素的实际 ID 是 DoctorsMainArea1_ctl01_txtName
。
知道如何解决这个问题吗?查询?我对正在发生的事情的解释不太感兴趣(也许此页面上有另一个控件正在干扰),而是解决问题的更可靠的方法。
最佳答案
我不知道您使用的是哪个 asp.net 版本,但在 4.0 中,您可以在任何服务器控件内声明 ClientIDMode="static",它会在浏览器中为您提供确切的 ID。
例子:
<asp:Textbox id="txtName" runat="server" ClientIdMode="static"/>
其他的是可预测的,继承的,它可以与 ClientIdRowsuffix 一起使用。可以在页面级别甚至母版页甚至 web.config 文件中使用。
web.config 文件中的示例:
<system.web>
<Pages clientIDMode="predictable"/>
other system web properties
</system.web>
在 tekpub 观看了 Craig shoemaker 的视频,您也可以在 Rick 的博客上阅读更多相关信息 link text .不过这很酷。
关于c# - ASP.Net:ClientID 在用户控件的代码隐藏中不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3562198/