中继器拉为空是后面的代码
本文关键字:代码 中继器 | 更新日期: 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.Item
是rp_FAQ
下的RepeatItem
,如果您愿意,您可以直接转换e.Item.Parent
或sender
。
e.Item
是Repeater
中的RepeaterItem
-它不包含Repeater
本身。只需强制转换事件的sender
:
var rp_FAQRep = (Repeater)sender;