2010-09-18 184 views
3

访问控制这是从.aspx文件区别,如果我可以通过ID

<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") so 我应该使用第二种方法 ,它通过 control.ClientID访问控制,为什么?

  • 我的第一个理解是,到 访问服务器控件我不得不使用 这句法<%= %>但现在我来 从这个例子,我可以 访问服务器端控件只是 通过 getElementById("ID-of-control")就知道了。

回答

3

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

1

Read this....

从交报价...

所有ASP.NET服务器控件包括唯一地识别 控制和是由 控制是编程 的装置的 ID属性在代码隐藏类中访问。 类似地,HTML 文档中的元素可以包括唯一标识该元素的id属性 ; 这些id值经常用于 客户端脚本以编程方式 引用特定的HTML元素。 考虑到这一点,您可能会假设当 ASP.NET服务器控件将 呈现为HTML时,其ID值将用作所呈现的HTML元素的ID值 。 这不一定的情况下 因为在某些情况下有一个ID值 一个 单一的控制可以在 呈现标记出现多次....

简短的回答是客户端ID,以确保你找到你控制。

1

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

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