Не могу получить доступ к пользовательскому контролю через JavaScript на внешней странице - PullRequest
2 голосов
/ 18 ноября 2011

Я разработал свой пользовательский элемент управления с label и textbox (оба из DevExpress). У меня есть страница с некоторыми элементами управления, включая мой и блок JavaScript. Я понимаю, что я должен использовать document.getElementById("<%=tbPosition.ClientID %>") чтобы получить доступ к пользовательскому контролю. Но document.getElementById("<%=tbPosition.ClientID %>") возвращает ноль.

Вот мой код: 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) Управление пользователем 'rsoft: TextBoxControl'

<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-элемент "tbPosition_tbValue_I", а не "tbPosition_tbValue"? Это происходит, когда я использую элементы управления DevExpress внутри моего пользовательского элемента управления. Когда мой контроль не содержит devexpress, но обычно <Asp:Textbox> У меня нет этой проблемы.

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Когда ASP.NET загружает UserControl, он ТОЛЬКО отображает содержимое UserControl.

Таким образом, в вашем случае он просто отобразит <table>, строки, ячейки, содержимое этих элементов.,Он превратит document.getElementById("<%=tbPosition.ClientID %>") в document.getElementById("tbPosition"), как и должно быть, потому что это то, что вы сказали ему делать во время выполнения, но tbPosition - ничто, когда отображается как html.

Ваши варианты:Либо напишите javascript в UserControl, чтобы получить доступ к этим элементам управления, ИЛИ установите для своих серверных элементов управления значение ClientIDMode="Static". Это обеспечит возможность ввода правильных идентификаторов элементов управления в ваш javascript.

var tb = document.getElementById('tbValue');
0 голосов
/ 18 ноября 2011

Вам нужно позвонить document.getElementById после того, как весь начальный DOM известен.

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