2011-03-18 96 views
3

我有一个中继器和一个按钮的页面。 (很简单)为什么这个活动被解雇?

我的中继器有一个事件rptEtats_ItemCreated引发OnItemCreated

<asp:Repeater ID="rptEtats" runat="server" OnItemCreated="rptEtats_ItemCreated"> 
    <ItemTemplate> 

    </ItemTemplate> 

</asp:Repeater> 

代码隐藏:

public void rptEtats_ItemCreated(object sender, RepeaterItemEventArgs e) 
{ 
    //Stuff 
} 

页面上的按钮养OnClick事件

<asp:Button ID="btnValid" runat="server" Text="Valid" OnClick="btnValid_click" /> 

代码隐藏:

public void btnValid_click(Object sender, EventArgs e) 
{ 
    //Stuff 
} 

它的做工精细,直到我按一下按钮,我预计btnValid_click方法,但该方法rptEtats_ItemCreated首先调用!我不明白为什么。在调用按钮方法之前,页面是否再次加载?为什么中继器再次数据绑定?

回答

1

您必须在Page_Init处调用rptEtats.Databind();,即在加载视图状态之前。在这种情况下,控件将被正确地重新创建,并且button onclik将被触发。

+0

我想知道这个答案与这个问题有什么关系。 – thorn 2011-03-18 14:57:10

1

我敢打赌,你已经在Page_Load事件中拨打了rptEtats.Databind()电话。

我对不对?

如果为true,sorround调用此方法是这样的:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!Page.IsPostBack) 
    { 
     rptEtats.Databind(); 
    } 

} 

你注意到的行为是由于页面生命周期的。页面加载事件在Click事件之前被调用。

+0

我已经用这个条件包围了绑定。 – bAN 2011-03-18 10:18:17

+0

Oups,我混淆了Item_Databound。对不起 – 2011-03-18 10:20:24

2

中继器不再绑定。它存储视图状态下的项目数量。在回发后,它读取该值并创建其子控件(项目)适当的次数,以便它们能够加载它们自己的视图状态。每次创建项目时都会触发ItemCreated事件。

相关问题