为什么这个事件会被解雇?

时间:2011-03-18 10:12:13

标签: c# asp.net webforms repeater

我有一个带有转发器和按钮的页面。 (很简单)

我的转发器有一个事件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方法!我不明白为什么。在调用按钮方法之前是否再次加载页面?为什么转发器再次进行数据绑定?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我打赌你在Page_Load活动中有一个rptEtats.Databind()电话。

我是对的吗?

如果是的话,请按照以下方式调用此方法:

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

}

您注意到的行为是由页面生命周期引起的。在Click事件之前调用Page Load事件。

答案 2 :(得分:1)

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