中继器拉为 Null 是代码背后?

Repeater pulling as Null is code behind?

我在一个网站上有一个常见问题解答,我试图根据它与哪个 treeid 相关将其分成几类。

当我在后面的代码中引用转发器 (rp_FAQ) 以检查它是否为 null 时,我可以将类别 ID 传递给存储过程,当我需要项目存在时,它会一直返回 null检查它是否为空。

我好像找不到问题的出处,请二位多多指教,不胜感激

谢谢。

我有这个中继器:

                    <asp:Repeater ID="rp_FAQ" DataSourceID="DS_GetFAQs" runat="server" OnItemDataBound="rp_FAQCategories_ItemDataBound">
                    <HeaderTemplate>
                        <div class="container-full fares_container">
                            <div class="row">
                    </HeaderTemplate>
                    <ItemTemplate>

                        <dt>Q: <%# Eval("Question") %></dt>
                        <dd>A: <%# Eval("Answer") %></dd>

                    </ItemTemplate>
                    <FooterTemplate>
                        </dl>
                        </div>
                    </div>
                    </FooterTemplate>
                </asp:Repeater>

下面是我的代码:

    protected void rp_FAQCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    Repeater rp_FAQRep = e.Item.FindControl("rp_FAQ") as Repeater;

    if (rp_FAQRep != null)
    {

        if (TreeData.CurrentDefault.IsRelation(Convert.ToInt32(Resources.Pages.FAQ)))
        {
            DS_GetFAQs.SelectParameters["CategoryID"].DefaultValue = "1";
        }

        rp_FAQRep.DataSource = DS_GetFAQs;
        rp_FAQRep.DataBind();
    }
}

问题是您正试图在 内部 rp_FAQ 本身的控件中找到 rp_FAQ 控件。

因为 e.Itemrp_FAQ 下的 RepeatItem,你可以直接施放 e.Item.Parent,或者 sender 如果你愿意的话。

e.ItemRepeater 中的 RepeaterItem - 它不包含 Repeater 本身。只需投出事件的sender

var rp_FAQRep = (Repeater)sender;

仅当您尝试获取对引发事件的控件内部的控件的引用时才需要 FindControl 方法(在本例中为 ItemDataBound)。因此,如果控件未嵌套在另一个控件中,您可以直接引用该控件,也可以使用 sender。例如:

var rp_FAQRep = rp_FAQ; //A bit pointless but demonstrates the point

var rp_FAQRep = (Repeater)sender;