c# - ASP.Net:ClientID 在用户控件的代码隐藏中不正确

标签 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">

代码隐藏:

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/

相关文章:

c# - 仅本地主机端点

c# - 按一定顺序组合列表c#

c# - 带有 Web 服务的标志

jquery - 尝试从表中获取正确的 'td:nth-child(1)' 值

.net - WPF MVVM + UserControl 与后面的代码

c# - Xamarin iOS 依赖服务始终在 iOS 应用程序中返回 null 对象

ASP.NET MVC : Click on a button to redirect based on drop down list's value

asp.net-mvc-3 - MVC 3 : Add usercontrol to Razor view

C# Form UserControl OnClick 事件

c# - 在 Visual Studio 2013 中更改项目端口号