在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;
答案 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页面对象内声明。因此名称可以相同。