使用JavaScript从主页面访问特定内容页面上的控件

时间:2014-01-20 17:41:47

标签: asp.net

在asp.net中,我选择了一个母版页和一个使用母版页选择的Web表单 在第一个网络表单中,我有一个文本框和按钮 当按钮单击时,OnClientClick属性包含validate()函数
现在在母版页的编码中我写了如下:

    function validate() {
        var no = document.getElementById('<%=Page.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1").ClientID %>').value;
        if (isNaN(no)) {
            alert('not a number.');
        }
    }

现在我拿了第二张网页表格 在那里我把一个日历控件,然后运行它 错误发生如下:

对象引用未设置为对象的实例。
第11行:函数validate(){
第12行:var no = document.getElementById('&lt;%= Page.Master.FindControl(“ContentPlaceHolder1”)。FindControl(“TextBox1”)。ClientID%&gt;')。value;
第13行:if(isNaN(no)){
第14行:警报('不是数字。');

我看到第12行:为红线。
那么如何运行第二个Web表单

1 个答案:

答案 0 :(得分:0)

内部内容页面声明了一个内嵌的Javascript变量。

<script>
  var jsTextBox1Id = <%=TextBox1.ClientID%>;
</script>

现在,您可以使用全局Validate()变量访问jsTextBox1Id中的控件ID。 像这样:

  var no = document.getElementById(jsTextBox1Id).value;

(请记住,此类方法不是推荐的做法。)

更新

要获取对客户端脚本中任何控件呈现的HTML元素的引用,您必须知道控件的 ClientID 属性的值。但是,由于用户控件可以放在网页的任何位置,因此无法预先知道哪些命名容器将包含控件。要确保 ClientID 值与 ID 值相同,只需将 ClientIDMode 值设置为静态

<asp:TextBox ID="MyStaticId" runat="server" ClientIDMode="Static">
</asp:TextBox>

现在您可以使用您MyStaticId定义的ID访问它,它不会有前置父容器名称。

 document.getElementById("MyStaticId").value

Source MSDN