ASP.NET用户控件:Page_Load在设置属性之前触发

时间:2009-09-05 16:26:46

标签: c# asp.net properties pageload

这让我发疯了。

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

public int? ImageId {set; get;}

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

然后我将此控件放在UpdatePanel中的ListView页面上:

<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设置ImageId之前触发。在调试器的帮助下,我发现由于某种原因,MyControl中的ImageId是SET,但只有在Page_Load完成处理后才会发生。怎么了?

1 个答案:

答案 0 :(得分:10)

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

根据MSDN提供的更多信息:

PreRender - 在此事件发生之前:

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