编译后找到ID

时间:2009-06-21 22:18:45

标签: c# asp.net javascript

当你在asp.net中分配一些ID时,例如:

<asp:Label runat="server" ID="mylabel" Text="some text"></asp:Label>

用于引用该对象的ID后面的代码是mylabel。

然而,在网站编译完并且正在运行HTML中的ID后,更改了一些更安全的内容

<asp:Label runat="server" ID="ct100_blahblah_what_mylabel" Text="some text"></asp:Label>

我不能(不知道如何)可靠地预测用javascript选择它会是什么。

有没有办法在任何特定时刻询问服务器该标签的ID是什么?

有哪些关键字可以用来了解有关此现象的更多信息?

2 个答案:

答案 0 :(得分:3)

我相信你正在寻找ClientID财产。

  

ClientID值通常用于   以编程方式访问HTML   为控件呈现的元素   客户端脚本。

您的另一个选择是将控件包装在这样的HTML元素中:

<span id="foo">
    <asp:Label runat="server" ID="mylabel" Text="some text"></asp:Label>
</span>

由于此外部元素没有runat="server"属性,因此在渲染时不会更改其id。这意味着你的JavaScript函数必须被改变以从span foo中拉出一个内部元素,或者如果你使用像jQuery这样的JavaScript框架,你可以像这样拉回标签:

$("span#foo span");

答案 1 :(得分:3)

您需要ClientID属性。这包含运行时控件的生成i​​d。您可以在后面的代码中发出一些JavaScript,将控件的客户端ID设置为JavaScript变量,以便您可以引用它。

编辑:添加了示例

以下内容将使用ClientID找到标签,然后更新其文本。

    <html>
    <body>
        <asp:Label runat="server" ID="mylabel" Text="some text"></asp:Label>

        <script language="javascript">
            var mylabelID = "<%= mylabel.ClientID %>";
            var label = document.getElementById(mylabelID);
            label.innerHTML += " changed";
        </script>
    </body>
    </html>