【发布时间】:2015-01-02 16:11:08
【问题描述】:
如何为不同的asp:Panel 服务器控件获取单独的NamingContainers?
在以下 .aspx 标记中,我看到:
<asp:Panel runat="server" ID="Case1" CssClass="caseEvaluationContainer">
<asp:Label ID="NamingContainer1" Text=<%# Case1.NamingContainer.UniqueID %> Runat="server"></asp:Label>
<br />
<asp:Label ID="UniqueID1" Text="<%# Case1.UniqueID %>" Runat="server"></asp:Label>
</asp:Panel>
<asp:Panel runat="server" ID="Case4" CssClass="caseEvaluationContainer">
<asp:Label ID="NamingContainer4" Text=<%# Case1.NamingContainer.UniqueID %> runat="server"></asp:Label>
<br />
<asp:Label ID="UniqueID4" Text="<%# Case1.UniqueID %>" runat="server"></asp:Label>
</asp:Panel>
UniqueIDs 被证明是不同的,但 不是NamingContainers。
我怎样才能得到类似下面的东西(我需要在页面上具有相同 ID 的控件没有使用单独的数据绑定容器,如 asp:Repeater 或 @ 987654328@.
<asp:Panel runat="server" ID="TestPanel1">
<asp:TextBox runat="server" ID="SameControlID"></asp:TextBox>
</asp:Panel>
<asp:Panel runat="server" ID="TestPanel2">
<asp:TextBox runat="server" ID="SameControlID"></asp:TextBox>
</asp:Panel>
【问题讨论】:
-
为什么要他们拥有相同的ID?我怀疑这是XY Problem。
-
同一个控件有多个 id 没有意义,它也会在 javascript 中产生问题。
-
您可能会使用
ContentPlaceHolder并将您的面板或其内容包装到其中。但是,正如其他人所说,这是一个非常奇怪的场景。你需要这个做什么? -
@Devesh,@mason,@Andrei 我不得不将标记复制/粘贴到面板中 4 倍(而不是使用
UserControl,因为我的老板认为这会花费太多时间)所以我结束了asp:Panels 1-4 中控件上的 ID 相同。这工作正常虽然面板包含在单独的asp:Repeaters...显然,如果标记包含在only中,这不工作asp:Panels。重命名它们太复杂了,即使是一个好的RegExpert,所以我会尝试使用ContentPlaceHolder,但这真的应该像@SurfThru 建议的那样作为UserControl完成。
标签: c# asp.net data-binding webforms panel