6

以下代码不起作用。标记位于用户控件中,我想这就是为什么 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

知道如何解决这个问题吗?jQuery?我对正在发生的事情的解释不太感兴趣(也许此页面上有另一个控件正在干扰),而是一种更强大的解决问题的方法。

4

4 回答 4

5

我不知道您使用的是哪个 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 的博客链接文本中阅读更多相关信息。这很酷。

于 2010-08-25T04:44:11.283 回答
4

您应该尝试将添加 onclick 属性的代码移动到页面或用户控件中PreRender事件(或 OnPreRender 覆盖)中的按钮。那可能应该得到正确的 ClientID。

于 2010-08-25T06:13:01.273 回答
0

快速解决方案:

btnFind.Attributes.Add("onClick",string.Format("DoctorLink
        ('{0}',document.getElementById('{1}').value,{2});",
        row["ZipCode"],
        "DoctorsMainArea1_ctl01_" + txtName.ClientID));

发生这种情况是因为您的页面中有一个内容占位符。

于 2010-08-25T01:33:23.217 回答
0

另一个解决方案:html标签:

<input type="text" name="txtName" id="txtName" />

代码绑定:

string txtName_value = Request.Forms["txtName"];

你可以得到价值

只需使用 html 控件。

于 2010-08-25T01:41:29.420 回答