2010-09-18 159 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將不再工作,可能很難看出爲什麼在以後的日子。