2009-09-05 4 views
8

이것은 나를 미치게합니다. ASP.NET 사용자 정의 : 속성이 설정되기 전에 Page_Load가 발생합니다.

난 아주 간단한 사용자 컨트롤이 있습니다

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> 

문제는 ASP.NET 설정하기 전에를 Page_Load 화재입니다 ImageId. 디버거의 도움으로 MyControl의 ImageId가 설정된 이유를 알았지 만, Page_Load가 처리를 마친 후에 만 ​​발생합니다. 뭐가 문제 야?

답변

9

아마도 ListView의 데이터 바인딩이 Page_Load 후에 발생하기 때문에 속성이 그 시점에서 설정되지 않았기 때문일 수 있습니다. 데이터 바인딩이 완료된 후 호출되므로 PreRender 이벤트로 코드를 이동할 수 있습니다. MSDN에 따라

상세 정보 :

사전 렌더링 -이 이벤트가 발생하기 전에 :

  • 페이지 객체는 각 컨트롤과 페이지에 대한 EnsureChildControls를 호출합니다.
  • DataSourceID 속성이 설정된 각 데이터 바인딩 된 컨트롤은 해당 DataBind 메서드를 호출합니다.
+0

감사합니다. PreRender는 나를 위해 일합니다. –

관련 문제