2009-09-05 13 views
8

To doprowadza mnie do szału.Kontrola użytkowników w programie ASP.NET: Page_Load pożary przed ustawieniem właściwości

Mam bardzo prostą kontrolę użytkownika:

public int? ImageId {set; get;} 

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

I wtedy umieścić tę kontrolę na stronie z ListView wewnątrz 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> 

Problemem jest pożary page_load PRZED zestawów ASP.NET ImageId. Z pomocą debuggera dowiedziałem się, że z jakiegoś powodu ImageId w MyControl IS SET, ale dzieje się to dopiero po zakończeniu Page_Load. Co jest nie tak?

Odpowiedz

9

Jest tak prawdopodobnie dlatego, że powiązanie danych w ListView dzieje się PO LASACH po uruchomieniu, dlatego też twoja własność nie jest ustawiona w tym punkcie. Możesz przenieść swój kod do zdarzenia PreRender, ponieważ jest on wywoływany po zakończeniu wiązania danych.

Więcej informacji według MSDN:

prerender - Zanim to nastąpi zdarzenie:

  • Przedmiotem Page nazywa EnsureChildControls dla każdej kontroli i dla strony.
  • Każda kontrola związana z danymi, której właściwość DataSourceID jest ustawiona, wywołuje metodę DataBind.
+0

Dzięki. PreRender działa dla mnie. –

Powiązane problemy