我在转发器内部有'BasketControl'控件:
<asp:Repeater runat="server" ID="rptItems">
<ItemTemplate>
<uc:BasketControl runat="server" ID="ucBasket" />
</ItemTemplate>
</asp:Repeater>
BasketObject列表绑定了转发器DataSource属性。
public class MyParentControl : System.Web.UI.UserControl
{
void Page_Load(object sender, EventArgs e) {
if(!IsPostback) {
rptItems.DataSource = ...; // List<BasketObject>
rptItems.DataBind();
}
}
}
如何在BasketControl中访问'BasketObject'? 我想要的是在BasketControl类中访问BasketObject,例如在'Page_Load'方法中。
public class BasketControl : System.Web.UI.UserControl
{
void Page_Load(object sender, EventArgs e) {
// here I want access BasketObject
BasketObject basket = .... as BasketObject;
}
}
应该很简单,但在谷歌找不到任何提示...
P.S。我应该处理'OnItemDataBound'转发器事件并分配数据对象来控制吗?还是有更快/更简单的方法?
由于
答案 0 :(得分:1)
通常我如何处理这类事情是通过处理ItemDatabound
事件。
所以说你有这个标记:
<asp:Repeater runat="server" ID="rptItems">
<ItemTemplate>
<uc:BasketControl runat="server" ID="ucBasket" />
</ItemTemplate>
</asp:Repeater>
代码看起来像这样:
protected override void OnInit(EventArgs e) {
base.OnInit(e);
this.rptItems += new RepeaterItemEventHandler(rptItems_ItemDatabound);
}
void Page_Load(object sender, EventArgs e) {
if(!IsPostback) {
rptItems.DataSource = ...; // List<BasketObject>
rptItems.DataBind();
}
}
void rptItems_ItemDatabound(object sender, RepeaterItemEventArgs e) {
BasketControl ucBasket = e.Item.FindControl("ucBasket") as BasketControl;
BasketObject basket = e.Item.DataItem as BasketObject;
// Use datasource/databind, but you could just as easily use a property/method of BasketControl
// Like so: ucBasket.LoadBasket(basket);
ucBasket.DataSource = basket;
ucBasket.DataBind();
}
希望很清楚。当然,您也可以使用AutoEventWireup="true"
并将事件处理程序的名称放在Repeater的标记中。但基本思路仍然相同。
编辑为了回应您的澄清,您将不得不明确地将它们连接起来。没有自动的方法。
我建议在Basket
上公开BasketControl
属性。然后你可以做这样的事情:
<%@ Import Namespace="Your WebApp Namespace Here" %>
<asp:Repeater runat="server" ID="rptItems">
<ItemTemplate>
<uc:BasketControl runat="server" ID="ucBasket" Basket='<%# (Basket)Container.DataItem %>' />
</ItemTemplate>
</asp:Repeater>
您不需要处理ItemDatabound
事件。如果还有另一种方法,我不确定它是什么。