【问题标题】:Access a control on the particular Content Page from a MasterPage using JavaScript使用 JavaScript 从 MasterPage 访问特定内容页面上的控件
【发布时间】:2014-01-20 17:41:47
【问题描述】:

在 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('').value;
第 13 行:if (isNaN(no)) {
第 14 行:alert('not a number.');

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

【问题讨论】:

    标签: asp.net


    【解决方案1】:

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

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

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

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

    (记住这种方法不是推荐的做法。)

    更新

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

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

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

     document.getElementById("MyStaticId").value
    

    Source MSDN

    【讨论】:

    • 谢谢.. 它作为第二种形式运行。但是当用户键入非数值时,警报消息不会出现在第一个 Web 表单中。所以验证没有完成。但有可能吗? -- 无需在内容页面中编写任何脚本代码并直接在母版页面中编写任何代码,因此它也可以工作。
    • 我为文本框 编写了以下代码,并在母版页中编写了以下代码:函数validate() { //var no = document.getElementById("MyStaticId").value; var no = document.getElementById("MyStaticId").innerHTML; if (isNaN(no)) { alert('不是数字。'); } } 但它不起作用..
    • 您查看浏览器中呈现的页面源中的 ID 了吗?
    • 对不起,你说的我听不懂?
    • 你用的是什么浏览器?
    猜你喜欢
    • 2013-12-27
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多