2009-09-05 136 views
8

这让我疯狂。ASP.NET用户控件:Page_Load在属性设置之前触发

我有一个非常简单的用户控制:

public int? ImageId {set; get;} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    ... do something with ImageId... 
} 

然后我把这个控件的页上的ListView内的UpdatePanel:

<asp:ListView ID="ListViewImages" runat="server" DataSourceID="src"> 
    <LayoutTemplate> 
    <asp:PlaceHolder ID="itemPlaceholder" runat="server" /> 
    </LayoutTemplate> 
    <ItemTemplate> 
    <My:MyControl ImageId='<%# Eval("Id") %>' ID="cipPreview" runat="server" /> 
    </ItemTemplate> 
</asp:ListView> 

问题是Page_Load中闪光之前ASP.NET套图像标识。通过调试器的帮助,我发现出于某种原因,MyControl中的ImageId是SET,但只有在Page_Load处理完成后才会发生。怎么了?

回答

9

这可能是因为ListView上的数据绑定发生在Page_Load触发后,因此您的属性并未设置在该点。您可以将代码移动到PreRender事件,因为它在数据绑定完成后被调用。

根据MSDN更多信息:

的PreRender - 在此之前,事件发生:

  • Page对象调用每个控件和页面EnsureChildControls。
  • 每个设置了DataSourceID属性的数据绑定控件都会调用其DataBind方法。
+0

谢谢。 PreRender为我工作。 – 2009-09-08 12:56:24

相关问题