我无法在另一个 UserControl 中的中继器中找到文字。
我有以下用户控件:
<nav role="navigation">
<ul>
<li><a href="/"<asp:Literal id="litNavHomeActive" runat="server" />>Home</a></li>
<asp:Repeater id="rpt_NavItem" runat="server" OnItemDataBound="rpt_OnItemDataBound">
<ItemTemplate>
<li><a href="/<asp:Literal id="lit_Url" runat="server" />/"<asp:Literal id="lit_NavActive" runat="server" />><asp:Literal id="lit_Title" runat="server" /></a></li>
</ItemTemplate>
</asp:Repeater>
</ul>
<div class="cb"></div>
</nav>
这被放置在一个 MasterPage 和另一个 ContentPage 中,我试图找到“lit_NavActive”并将其隐藏。
我正在使用这个:
Repeater rpt = ((Theme)Page.Master).FindControl("Navigation").FindControl("rpt_NavItem") as Repeater;
Literal lit = rpt.FindControl("lit_NavActive");
if (lit != null) { lit.Visible = false; }
它不起作用,如果我这样做 rpt.Visible = false;在隐藏整个转发器方面效果很好,所以我很接近但未能在转发器中找到文字(lit_NavActive)。有任何想法吗?
最佳答案
您需要在 RepeaterItem
上找到控件,而不是在 Repeater
self
foreach (var item in rpt.Items)
{
Literal lit = item.FindControl("lit_NavActive");
if (lit != null) { lit.Visible = false; }
}
请记住,
Repeater
会“重复”项目,因此 Repeater
中可能有多个文字。上面的代码将隐藏所有 Literal
s。如果您需要隐藏“特定”,则在循环中,您应该应用您的条件并决定是显示还是隐藏它。
或者考虑使用
ItemDataBound
的 Repeater
事件。关于c# - 在中继器内的 Web 窗体中查找控件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30646353/