Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ID和control.ClientID之间的差异,或者如果我可以通过ID访问控件,为什么要使用control.ClientID_Javascript_Asp.net - Fatal编程技术网

Javascript ID和control.ClientID之间的差异,或者如果我可以通过ID访问控件,为什么要使用control.ClientID

Javascript ID和control.ClientID之间的差异,或者如果我可以通过ID访问控件,为什么要使用control.ClientID,javascript,asp.net,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("t

这是.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>

再次登录
函数验证(){
if(document.getElementById(“txtLogin”).value==“”){
警报(“输入登录名”);
}
if(document.getElementById(“”).value==“”){
警报(“输入登录名”);
}
}
  • 在函数Validate()中,我可以 使用控件的Id访问文本框 i、 e
    getElementById(“txtLogin”)
    so 我应该使用第二种方法吗 这是通过访问控制
    control.ClientID
    为什么

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


最终HTML中生成的ID不能保证与您的aspx源代码中的ID保持相同。当您将控件放在命名容器中时,ID将在一个或多个父ID前面加上前缀,以确保其唯一性。ClientId属性将始终为您提供ID属性的最终形式,因为它最终会出现在HTML中,因此建议您在javascript中始终使用它。

引自《邮报》

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


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

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

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