代码之家  ›  专栏  ›  技术社区  ›  cdonner

ASP.NET:用户控件后面的代码中的clientID不正确

  •  6
  • cdonner  · 技术社区  · 14 年前

    以下代码不起作用。标记在用户控件中,我想这就是为什么clientid返回的文本框ID前缀错误的原因。

    Markup:

    <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 回复  |  直到 14 年前
        1
  •  4
  •   VinayC    14 年前

    您应该尝试移动将onclick属性添加到 预置器 页面或用户控件中的事件(或OnPreRender重写)。这可能会使客户的身份正确。

        2
  •  5
  •   Developer    14 年前

    我不知道您使用的是哪个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 . 这真是太酷了。

        3
  •  0
  •   Leniel Maccaferri    14 年前

    快速解决方案:

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

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

        4
  •  0
  •   Tim Li    14 年前

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

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

    代码绑定:

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

    你可以得到价值

    只需使用HTML控件。