这让我发疯了。
我有一个非常简单的用户控件:
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完成处理后才会发生。怎么了?
答案 0 :(得分:10)
这可能是因为ListView的数据绑定在Page_Load触发后发生,因此您的属性不会在此时设置。您可以将代码移动到PreRender事件,因为它在数据绑定完成后调用。
根据MSDN提供的更多信息:
PreRender - 在此事件发生之前: