这是.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")
。
答案 0 :(得分:3)
最终HTML中生成的ID不保证与aspx源中的ID保持一致。当您将控件放在命名容器中时,ID将预先添加一个或多个父ID以确保其唯一性。 ClientId属性将始终为您提供ID属性的最终形式,因为它最终在HTML中,因此始终建议您在JavaScript中使用它。
答案 1 :(得分:1)
从帖子中引用...
所有ASP.NET服务器控件都包含一个 唯一标识的ID属性 控制和是通过它的手段 控件是以编程方式 在代码隐藏类中访问。 同样,HTML中的元素 文档可以包含id属性 唯一标识元素的; 这些id值经常用于 客户端脚本以编程方式 引用特定的HTML元素。 鉴于此,您可以假设何时 呈现ASP.NET服务器控件 在HTML中,其ID值用作 呈现的HTML元素的id值。 情况不一定如此 因为在某些情况下 具有单个ID值的单一控件 可能会出现多次 渲染标记......
简短回答是ClientID,以确保您找到您的控制权。
答案 2 :(得分:1)
您使用的是哪个版本的ASP.NET?在.NET 4中,您可以指定不自动生成ID。
我认为这是巧合,因为你没有使用任何用户控件或其他容器。一旦你这样做,你将不再能够保证控件ID将保持不变,因此你应该使用第二种方法作为最佳实践,因为如果你的页面被修改为我声明的方式你的javascript将不再起作用,可能很难在以后看到原因。