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