2009-09-05 10 views
8

Questo mi sta facendo impazzire.Controllo utente ASP.NET: Page_Load viene attivato prima che la proprietà sia impostata

Ho un controllo molto semplice utente:

public int? ImageId {set; get;} 

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

E poi ho messo questo controllo sulla pagina con ListView all'interno 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> 

Il problema è incendi Page_Load PRIMA set di ASP.NET ImageID. Con l'aiuto del debugger ho scoperto che per qualche ragione ImageId in MyControl è SET, ma succede solo dopo che Page_Load ha terminato l'elaborazione. Cosa c'è che non va?

risposta

9

Probabilmente è perché il binding di dati su ListView avviene dopo che gli Page_Load si sono attivati, pertanto la proprietà non è impostata in quel punto. È possibile spostare il codice sull'evento PreRender poiché viene chiamato dopo che l'associazione dei dati è stata completata.

Maggiori informazioni in base alle MSDN:

PreRender - Prima di questo evento si verifica:

  • L'oggetto pagina chiama EnsureChildControls per ogni controllo e per la pagina.
  • Ogni controllo associato ai dati la cui proprietà DataSourceID è impostata chiama il metodo DataBind.
+0

Grazie. PreRender funziona per me. –

Problemi correlati