[英]ASP.NET web control with the same ID
在 ASP.NET 頁面上,如果像<asp:Texbox ID="Textbox1">
這樣的 ASP.NET 元素出現在多個位置,它們是相同的 Textbox 對象還是具有相同名稱“Textbox1”的不同對象? 如果相同,“為什么不會引起任何沖突?”
例如
<asp:DetailsView
ID="DetailsView1" runat="server" AutoGenerateRows="False" CellPadding="4"
DataKeyNames="CategoryID" DataSourceID="SqlDataSource1" DefaultMode="Insert"
ForeColor="#333333" GridLines="None" Height="50px" Width="125px">
<AlternatingRowStyle BackColor="White" />
<CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
<EditRowStyle BackColor="#2461BF" />
<FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />
<Fields>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<EditItemTemplate>
**<asp:TextBox ID="TextBox1"** runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
**<asp:TextBox ID="TextBox1"** runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
<span class="style6">
<br />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" Display="Dynamic"
ErrorMessage="RequiredFieldValidator" ValidationGroup="A"></asp:RequiredFieldValidator>
</span>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField CancelText="" ShowInsertButton="True" ValidationGroup="A" />
</Fields>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" />
</asp:DetailsView>
我相信您指的是關於數據綁定控件的命名容器。 如果您在轉發器中有一個 TextBox,基本上它們會呈現如下:
<input name="Repeater1$ctl00$TextBox1" type="text" value="Text on row" id="Repeater1_ctl00_TextBox1" />
<input name="Repeater1$ctl01$TextBox1" type="text" value="Text on row" id="Repeater1_ctl01_TextBox1" />
根據您的更新。
如果您在GridView
或任何其他允許嵌套控件的控件中聲明控件(文本框),則 ASP.NET 引擎實際上會為其創建一個唯一 ID(類似於 ctl00_main_ddlCtrl)。 從 ASP.NET 4.0 開始,您可以控制它創建的 ID,而以前的版本則不能。
這些元素的行為取決於瀏覽器。 在 HTML 規范中要求 ID 必須是唯一的。 因此,即使瀏覽器會接受這樣的頁面,行為也可能有點偏離。 通常,沒有元素會響應非唯一 ID。
您的問題的答案是,它們根本不是您聲明它們的對象。
<asp:Textbox Id="TextBox1">SOMETEXT</asp:textbox>
<asp:Textbox Id="TextBox1">SOMETEXT2</asp:textbox>
它們只是具有相同 id 屬性的 html 標簽。 查看網頁的源代碼,您會看到它們只是呈現為文本 b/c,瀏覽器不知道如何使用標簽。 而不是將它們轉換為輸入。 如果沒有 Runat="server" 標簽,編譯器將不會將它們轉換為帶有生成 Id 標簽的 html,它們也將無法在后面的代碼中訪問。
當您添加 runat="server" 標記時,您將被迫將 Id 屬性更改為唯一名稱 b/c,除非在相同的上下文中,因此不能具有相同的 id。
基本上簡短的回答是,如果您看到<asp:textbox...
當您通過瀏覽器查看源代碼時,您沒有正確聲明您的文本框。 相反,您應該看到<input ...
在其他控件內聲明文本框控件,例如 gridview 控件是在包含控件的對象內聲明,即不再在 aspx 頁面對象內聲明。 因此名稱可以相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.