2009-09-05 14 views
8

Esto me está volviendo loco.Control de usuario de ASP.NET: Page_Load se dispara antes de que se establezca la propiedad

Tengo un muy simple control de usuario:

public int? ImageId {set; get;} 

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

Y entonces me puse este control en la página con ListView dentro de 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> 

El problema es Page_Load incendios antes de que comience ASP.NET ImageId. Con la ayuda del depurador descubrí que, por alguna razón, ImageId en MyControl IS SET, pero solo ocurre después de que Page_Load ha terminado de procesarse. ¿Qué pasa?

Respuesta

9

Probablemente porque el enlace de datos en ListView ocurre DESPUÉS de que Page_Load se dispare, por lo que su propiedad no está configurada en ese momento. Puede mover su código al evento PreRender ya que se llama después de que se completa el enlace de datos.

Más información según la MSDN:

PreRender - Antes de que ocurra este evento:

  • El objeto Página llama EnsureChildControls para cada control y para la página.
  • Cada control vinculado a datos cuya propiedad DataSourceID está establecida llama a su método DataBind.
+0

Gracias. PreRender funciona para mí. –

Cuestiones relacionadas