ID和control.ClientID之间的区别如果我可以通过ID访问控件,为什么要使用control.ClientID

时间:2010-09-18 21:29:46

标签: javascript asp.net

这是.aspx文件中的代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Login Again</title>

    <script type="text/javascript">
        function Validate() {
            if (document.getElementById("txtLogin").value == "") {
                alert("Enter login name.");
            }

            if (document.getElementById("<%=txtLogin.ClientID%>").value == "") {
                alert("Enter login name.");
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <asp:TextBox ID="txtLogin" runat="server"></asp:TextBox>
    <asp:Button ID="btnSubmit" runat="server" Text="Login" OnClientClick="Validate()" />
    </form>
</body>
</html>
  • 在功能验证()我可以 使用控件ID访问文本框 即; getElementById("txtLogin")所以 我应该使用第二种方法吗? 通过访问控制 control.ClientID以及为什么?

  • 我的第一个理解是 访问服务器控件我必须使用 这个语法<%= %>但现在我来了 从这个例子中我知道我可以 简单地访问服务器端控件 通过 getElementById("ID-of-control")

3 个答案:

答案 0 :(得分:3)

最终HTML中生成的ID不保证与aspx源中的ID保持一致。当您将控件放在命名容器中时,ID将预先添加一个或多个父ID以确保其唯一性。 ClientId属性将始终为您提供ID属性的最终形式,因为它最终在HTML中,因此始终建议您在JavaScript中使用它。

答案 1 :(得分:1)

Read this....

从帖子中引用...

  

所有ASP.NET服务器控件都包含一个   唯一标识的ID属性   控制和是通过它的手段   控件是以编程方式   在代码隐藏类中访问。   同样,HTML中的元素   文档可以包含id属性   唯一标识元素的;   这些id值经常用于   客户端脚本以编程方式   引用特定的HTML元素。   鉴于此,您可以假设何时   呈现ASP.NET服务器控件   在HTML中,其ID值用作   呈现的HTML元素的id值。   情况不一定如此   因为在某些情况下   具有单个ID值的单一控件   可能会出现多次   渲染标记......

简短回答是ClientID,以确保您找到您的控制权。

答案 2 :(得分:1)

您使用的是哪个版本的ASP.NET?在.NET 4中,您可以指定不自动生成ID。

我认为这是巧合,因为你没有使用任何用户控件或其他容器。一旦你这样做,你将不再能够保证控件ID将保持不变,因此你应该使用第二种方法作为最佳实践,因为如果你的页面被修改为我声明的方式你的javascript将不再起作用,可能很难在以后看到原因。