我在网站上有常见问题的转发器,我试图将其分成几类,具体取决于与之相关的树状结构。
当我在后面的代码中引用转发器(rp_FAQ)来检查它是否为null所以我可以将类别id传递给存储过程,当我检查它是否为空时我需要该项存在时它保持返回null。 / p>
我似乎无法找到问题的路线,因为第二组眼睛真的很感激。
感谢。
我有这个转发器:
<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();
}
}
答案 0 :(得分:1)
问题是您试图在 rp_FAQ
内的控件中找到rp_FAQ
控件。
由于e.Item
是RepeatItem
下的rp_FAQ
,您可以根据自己的意愿投出e.Item.Parent
或sender
。
答案 1 :(得分:1)
e.Item
是RepeaterItem
中的Repeater
- 它不包含Repeater
本身。只需投射活动的sender
:
var rp_FAQRep = (Repeater)sender;
答案 2 :(得分:1)
只有在尝试获取引发事件的控件内的控件(在本例中为FindControl
)时才需要ItemDataBound
方法。因此,如果控件未嵌套在另一个控件中,则可以直接引用该控件,或者使用sender
。例如:
var rp_FAQRep = rp_FAQ; //A bit pointless but demonstrates the point
或
var rp_FAQRep = (Repeater)sender;