具有相同ID的ASP.NET Web控件

时间:2010-06-18 14:56:13

标签: c# .net asp.net

在ASP.NET页面上,如果像<asp:Texbox ID="Textbox1">这样的ASP.NET元素出现在多个位置,它们是相同的Textbox对象还是具有相同名称“Textbox1”的不同对象?如果相同,“为什么不会引起任何冲突?”

E.G。                                                                                                 runat =“server”Text ='&lt;%#Bind(“Name”)%&gt;'&gt;                                                        runat =“server”Text ='&lt;%#Bind(“Name”)%&gt;'&gt;                                          
                                                                                                “&GT;                                                                                             

5 个答案:

答案 0 :(得分:1)

我相信你在数据绑定控件方面指的是Naming Containers。如果你在转发器里面有一个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" />

答案 1 :(得分:0)

根据您的更新。

如果在GridView或允许嵌套控件的任何其他控件中声明控件(文本框),那么ASP.NET引擎实际上为它创建了一个唯一的ID(类似于ctl00_main_ddlCtrl)。从ASP.NET 4.0中,您可以控制它创建的ID,而以前的版本则不能。

答案 2 :(得分:0)

此类元素的行为取决于浏览器。在HTML规范中,要求ID必须是唯一的。因此,即使浏览器接受这样的页面,行为也可能有点偏差。通常,任何元素都不会响应非唯一ID。

答案 3 :(得分:0)

你的问题的答案是它们不是你声明它们的所有对象。

<asp:Textbox Id="TextBox1">SOMETEXT</asp:textbox>
<asp:Textbox Id="TextBox1">SOMETEXT2</asp:textbox>

它们只是具有相同id属性的html标记。查看网页的来源,您将看到它们只是呈现为文本b / c浏览器不知道该做什么w /标签。而不是将它们转换为输入。如果没有Runat =“server”标记,编译器将不会将它们转换为带有生成的Id标记的html,也不会在后面的代码中访问它们。

当您添加runat =“server”标记时,您将被强制将Id属性更改为唯一名称b / c它们除了在相同的上下文中,因此不能具有相同的ID。

基本上简短的回答是,如果您在通过浏览器查看来源时看到<asp:textbox...,则表示您尚未正确声明文本框。相反,您应该看到<input ...

答案 4 :(得分:0)

在其他控件中声明文本框控件,例如gridview控件在包含控件的对象内部声明,即不再在aspx页面对象内声明。因此名称可以相同。