无法通过外部页面上的javascript访问User-Control

时间:2011-11-18 11:19:15

标签: javascript asp.net user-controls devexpress

我使用labeltextbox开发了我的用户控件(两者都来自DevExpress)。 我有一个页面包含一些控件,包括我的和javascript块。 我意识到我必须使用  document.getElementById("<%=tbPosition.ClientID %>")获取用户控制权限。但是document.getElementById("<%=tbPosition.ClientID %>")返回null。

这是我的代码: 1)Page.aspx具有用户控件

<script type="text/javascript" language="javascript">
    var tb = document.getElementById("<%=tbPosition.ClientID %>"); // returns null
</script>

<head></head>
<body>
    <rsoft:TextBoxControl ID="tbPosition" runat="server" 
      Title="Позиция" IsRequired="true" 
      ValidationMode="UnsignedInt" ClientIDMode="Static" />
</body>

2)用户控制&#rs; rsoft:TextBoxControl&#39;

<table>
<tr>
    <td class="styleFieldLabel">
        <asp:Label ID="lblTitle" Text="" runat="server" Font-Bold="True" />
        &nbsp;
    </td>
    <td class="styleFieldInput">
        <dx:ASPxTextBox ID="tbValue" runat="server" Width="500px"
            ClientIDMode="Static" ClientInstanceName="tbValue">   
        <ClientSideEvents TextChanged="tbValue_TextChanged" />                     
            <ValidationSettings SetFocusOnError="True" Display="Dynamic" RequiredField-ErrorText="Поле обязательно для заполнения" 
                ErrorTextPosition="Bottom" ValidateOnLeave="false" />                
        </dx:ASPxTextBox>            
    </td>
</tr>

有人知道为什么document.getElementById("<%=tbPosition.TextBoxClientID %>")变成了document.getElementById("tbPosition_tbValue"),但是有一个html元素&#34; tbPosition_tbValue_I&#34;不是&#34; tbPosition_tbValue&#34;?当我在用户控件中使用DevExpress控件时,就会发生这种情况。当我的控件不包含devexpress但通常<Asp:Textbox>我没有遇到这个问题。

2 个答案:

答案 0 :(得分:1)

当ASP.NET加载UserControl时,它只会呈现UserControl的内容。

因此,在您的情况下,它只会呈现<table>,行,单元格和内容。它会将document.getElementById("<%=tbPosition.ClientID %>")转换为document.getElementById("tbPosition"),因为这是你在运行时告诉它的,但tbPosition在渲染为html时没什么。

您的选择是:在UserControl中编写javascript以访问这些控件,或者将服务器控件设置为ClientIDMode="Static"这将确保您可以将控件的正确ID放入您的javascript中。

var tb = document.getElementById('tbValue');

答案 1 :(得分:0)

在知道整个初始DOM之后,您需要调用document.getElementById

window.onload = function () {
  var tb = document.getElementById(...);
};