WebForms 為確保控件在 NamingContainer(如 UserControl、GridView、Repeater)中 ClientID 唯一,會自動加前綴(如 LoginForm_txtUserName),導致 JavaScript 無法直接用固定 ID 選取元素。
<asp:TextBox runat="server" ID="textBox" />
<script>
document.getElementById("<%= this.textBox.ClientID %>").value = "Hello World!";
</script>
輸出 HTML:
<input name="DemoControl1$textBox" type="text" id="DemoControl1_textBox" />
<script>document.getElementById("DemoControl1_textBox").value = "Hello World!";</script>
ClientID 給前端(<%= control.ClientID %> 或 ClientIDMode="Static" ASP.NET 4.0+)。data-* 屬性選取,避免綁定 ID。$('[id$=textBox]') 尾碼匹配(效能較差,慎用)。理解 NamingContainer 機制,就能在 WebForms 中優雅共存 JavaScript 與伺服器控件。