2009-09-05 13 views
8

これは私を夢中にしています。 ASP.NETユーザーコントロール:プロパティが設定される前にPage_Loadが発生します

私は非常に単純なユーザーコントロールがあります。

public int? ImageId {set; get;} 

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

をそして私は、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> 

問題は、ASP.NETセット、BEFOREをPage_Load火災でImageId。デバッガの助けを借りて、私はMyControlのImageIdが何らかの理由でSETに設定されていることを知りましたが、Page_Loadが処理を完了した後にのみ発生します。どうしましたか?

答えて

9

おそらく、ListViewのデータバインディングはPage_Load後に発生するため、その時点でプロパティが設定されていない可能性があります。データバインディングが完了した後に呼び出されるため、コードをPreRenderイベントに移動することができます。 MSDNに応じ

さらに詳しい情報:

のPreRender - このイベントが発生する前に:

  • Pageオブジェクトは、各コントロールのために、ページのためのEnsureChildControlsを呼び出します。
  • DataSourceIDプロパティが設定されている各データバインドコントロールは、DataBindメソッドを呼び出します。
+0

ありがとうございました。 PreRenderは私のために働く。 –

関連する問題