中继器拉为 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.Item
是 rp_FAQ
下的 RepeatItem
,你可以直接施放 e.Item.Parent
,或者 sender
如果你愿意的话。
e.Item
是 Repeater
中的 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;
我在一个网站上有一个常见问题解答,我试图根据它与哪个 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.Item
是 rp_FAQ
下的 RepeatItem
,你可以直接施放 e.Item.Parent
,或者 sender
如果你愿意的话。
e.Item
是 Repeater
中的 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;