代码之家  ›  专栏  ›  技术社区  ›  Kashif

id和control.clientid之间的区别,或者如果我可以通过id访问控制,为什么要使用control.clientid

  •  3
  • Kashif  · 技术社区  · 14 年前

    这是.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 回复  |  直到 7 年前
        1
  •  3
  •   CyberDude    14 年前

    最终HTML中生成的ID不能保证与ASPX源代码中的ID相同。当您将控件放在命名容器中时,ID将预先附加一个或多个父ID,以确保其唯一性。clientID属性将始终为您提供id属性的最终形式,因为它最终出现在HTML中,所以建议您在JavaScript中使用该属性。

        2
  •  1
  •   Kevin LaBranche    14 年前

    Read this....

    引述自文章…

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

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

        3
  •  1
  •   Rob Stevenson-Leggett    14 年前

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

    我认为在这种情况下这是一个巧合,因为您没有使用任何用户控件或其他容器。一旦你这样做了,你就不能再保证控件ID保持不变,因此你应该使用第二种方法作为最佳实践,因为如果你的页面是按照我所说的方式修改的,你的javascript将不再工作,很难理解为什么以后会这样。