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

问题描述 投票:3回答:3

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

我具有以下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;在隐藏整个中继器时效果很好,所以我很接近,但是在中继器内找不到Literal(lit_NavActive)。有什么想法吗?

c# asp.net webforms repeater findcontrol
3个回答
4
投票

您需要在RepeaterItem上找到控件,而不是在Repeater自身上找到控件>

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

1
投票

由于转发器是数据绑定控件,所以转发器的每一行都将包含一个名为“ lit_NavActive”的文字。因此,它在页面上唯一地命名它们。如果查看页面的源代码,您会发现它们的名称如下:


0
投票

我已经看过许多这样的答案,但我一直希望从模板本身(在“ HTML”中)将转发器项目中的控件传递给方法。

还有我还没有看到的答案,但是你可以做到:

© www.soinside.com 2019 - 2024. All rights reserved.