c# - 在转发器内的 Web 窗体中查找控件

标签 c# asp.net webforms repeater findcontrol

我无法在另一个 UserControl 中的 Repeater 中找到文字。

我有以下用户控件:

<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 自身上

foreach (var item in rpt.Items)
{
   Literal lit = item.FindControl("lit_NavActive");
   if (lit != null) { lit.Visible = false; }
}

请记住,Repeater“重复”项目,因此您的Repeater 中可能有多个文字。上面的代码隐藏了所有的Literal

如果你需要隐藏一个“特定的”,那么在循环中,你应该应用你的条件并决定是显示还是隐藏它。

或者考虑使用 RepeaterItemDataBound 事件。

关于c# - 在转发器内的 Web 窗体中查找控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646353/

相关文章:

ruby-on-rails - 如何根据 Rails 3.0.x 中的表单选项指定响应格式

c# - asp.net webforms 谷歌登录

C# 拆分第一个字符出现的字符串

.net - LINQ to SQL 还是经典的 ADO.NET?

c# - 检查 Null 异常的正确方法是什么?

javascript - 如何在asp中显示值:textbox using javascript

c# - 为什么我无法显示这个特定的#变量值?

c# - DataGridTemplateColumn 中的命令绑定(bind)

C# Groupby Linq 和 foreach

c# - 如何绑定(bind)listview选中的item到其他控件?