我使用label
和textbox
开发了我的用户控件(两者都来自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" />
</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>
我没有遇到这个问题。
答案 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(...);
};