cdo*_*ner 6 c# asp.net user-controls clientid
以下代码不起作用.标记位于用户控件中,我想这就是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">
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
btnFind.Attributes.Add("onClick",string.Format("DoctorLink
('{0}',document.getElementById('{1}').value,{2});",
row["ZipCode"],
txtName.ClientID));
Run Code Online (Sandbox Code Playgroud)
浏览器结果:
<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);" />
Run Code Online (Sandbox Code Playgroud)
如您所见,JavaScript调用的参数是DoctorsMainArea1_ctl00_txtName,但输入元素的实际ID是DoctorsMainArea1_ctl01_txtName.
知道如何解决这个问题吗?jQuery的?我对解释正在发生的事情并不感兴趣(可能在此页面上有另一个控件干扰),但是解决问题的方法更为强大.
我不知道你使用的是哪个asp.net版本但是在4.0中你可以在任何服务器控件内声明ClientIDMode ="static",它会在浏览器中为你提供准确的id.
例:
<asp:Textbox id="txtName" runat="server" ClientIdMode="static"/>
Run Code Online (Sandbox Code Playgroud)
其他是可预测的,继承的,它可以与ClientIdRowsuffix一起使用.可以在页面级别甚至在母版页甚至web.config文件中使用.
web.config文件的示例:
<system.web>
<Pages clientIDMode="predictable"/>
other system web properties
</system.web>
Run Code Online (Sandbox Code Playgroud)
在tekpub观看了Craig鞋匠的视频,您还可以在Rick的博客链接文本中阅读更多相关信息.这很酷.
| 归档时间: |
|
| 查看次数: |
8565 次 |
| 最近记录: |