中继器拉为空是后面的代码

本文关键字:代码 中继器 | 更新日期: 2023-09-27 17:54:59

我在一个网站上有一个常见问题的重复器,我试图根据它与哪个树相关将其分成类别。

当我在后面的代码中引用重复器(rp_FAQ)来检查它是否为null时,我可以将类别id传递给存储过程,当我需要项目存在时,它会返回null,当检查它为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();
    }
}

中继器拉为空是后面的代码

FindControl方法仅在您试图获得引发事件的控件(在本例中为ItemDataBound)内部的控件的引用时才需要。所以你可以直接引用控件,如果它没有嵌套在另一个控件或使用sender。例如:

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

var rp_FAQRep = (Repeater)sender;

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

由于e.Itemrp_FAQ下的RepeatItem,如果您愿意,您可以直接转换e.Item.Parentsender

e.ItemRepeater中的RepeaterItem -它不包含Repeater本身。只需强制转换事件的sender:

var rp_FAQRep = (Repeater)sender;