2012-03-30 12 views
4

MSDN sagt, dass dynamische Steuerelemente im PreInit-Ereignis des Seitenlebenszyklus erstellen.Erstellen Sie dynamische Steuerelemente im PreInit-Ereignis des Seitenlebenszyklus?

http://msdn.microsoft.com/en-us/library/ms178472.aspx

Warum?

Welchen Vorteil ergibt sich durch die Erstellung in PreInit Event ?.

Ich habe Code gesehen, wo Entwickler dynamische Steuerelemente in der Page Load-Methode erstellen?

Wenn es einen Unterschied gibt ?.

Grüße

+0

http://stackoverflow.com/q/4761273/284240 'OnLoad' funktioniert vielleicht, aber nicht immer, Sie sind auf der sicheren Seite in' OnInit'. –

Antwort

4

Page_Load funktioniert gut, wenn Sie nicht brauchen, um Sorgen über die Kontrollen ViewState über Postbacks zu speichern, aber wenn Sie es anhalten müssen, die Load Bühne ist nicht, wo Sie sollten diese Steuerelemente hinzufügen.

Dynamische Steuerelemente müssen in der Steuerungshierarchie der Seite vorhanden sein, bevor ViewState geladen wird. Es gibt nur eine Stufe vor dem Ladezustand anzeigen - Initialisierung. Das bedeutet, wenn Sie möchten, dass Ihre dynamischen Steuerelemente den Ansichtszustand beibehalten, müssen Sie sie zur Steuerhierarchie im Ereignis Init der Seite hinzufügen.

http://aspnet.4guysfromrolla.com/demos/printPage.aspx?path=/articles/092904-1.aspx

aber daran, dass Sie nicht das ViewState in Init Ereignis zugreifen, da es noch nicht geladen. Sie müssen also ein anderes Persistenzmedium verwenden, um Variablen bei Postbacks (wie Session) zu speichern, falls erforderlich.

+0

Ich verstehe nicht, was Sie meinen, wenn Sie möchten, dass Ihre dynamischen Steuerelemente den Ansichtszustand beibehalten, müssen Sie sie zur Steuerhierarchie im Init-Ereignis der Seite hinzufügen.Ich hatte ein Problem, wo ich auf den ViewState der dynamischen Kindersteuerelemente zugreifen musste, nachdem sie erstellt wurden, um Werte für Postbacks zu erhalten, und ich konnte ihren ViewState in der Seite 'Load' verwenden, nachdem das Elternelement festgelegt wurde. Was vermisse ich? – ceztko

+0

[Hier] (http://stackoverflow.com/a/23143377/213871) für das Beispiel, von dem ich gesprochen habe. – ceztko

0

Tim, Danke für die Antwort. Ich habe ein kleines Experiment gemacht, in dem ich ein TextBox-Steuerelement dynamisch in der Page_Load-Methode erstelle und hinzufüge.

Im Postback klicken Ereignis von Button auf der Seite, ich versuche, den Wert der Text-Eigenschaft der TextBox zu erhalten. Ich kann den Wert im click-Ereignis des Buttons abrufen, wenn das Steuerelement dynamisch im Page_Load-Ereignis und nicht in der OnPreInt-Methode hinzugefügt wird. Ich denke, dass der Wert Text in ViewState beibehalten wird, obwohl das Steuerelement in Page_Load Methode hinzugefügt wurde.

nach dem Code:

<div> 
     <p> 
      <asp:Label ID="lbl" runat="server" /> 
     </p> 
     <p> 
      <asp:PlaceHolder ID="plcHolder" runat="server"></asp:PlaceHolder> 
     </p> 
     <p> 
      <asp:Button ID="btn" runat="server" Text="Click" OnClick="btn_Click" /> 
     </p> 
    </div> 


private void _createTextBox() 
{ 
    TextBox textBox = new TextBox(); 
    textBox.ID = "txtBox"; 
    textBox.Width = 250; 
    textBox.ReadOnly = false; 
    plcHolder.Controls.Add(textBox); 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    _createTextBox(); 
    if (!this.IsPostBack) 
    { 
     Control ctrl = plcHolder.FindControl("txtBox"); 
     if (ctrl != null) 
     { 
      TextBox txtBox = ctrl as TextBox; 
      txtBox.Text = DateTime.Now.ToString(); 
     } 
    } 
} 
protected void btn_Click(object sender, EventArgs e) 
{ 
    Control ctrl = plcHolder.FindControl("txtBox"); 
    if (ctrl != null) 
    { 
     TextBox txtBox = ctrl as TextBox; 
     lbl.Text = txtBox.Text; 
    } 
} 

Bitte lassen Sie mich wissen ist das richtig oder was mache ich falsch?

2

Diese Antwort könnte für das ursprüngliche Plakat spät sein, aber ich dachte, dass es einigen anderen Leuten helfen könnte.

Wenn Ihre Anwendung/Website keine Masterseite verwendet, erstellen Sie die Steuerelemente am besten am Page_PreInit-Ereignis. Wenn Sie jedoch die Masterseite verwenden und zur Laufzeit Steuerelemente auf Inhaltsseiten erstellen möchten, ist Page_Init das ideale Ereignis.

Sie können auch Steuerelemente auf Page_Load erstellen, bedenken Sie jedoch, dass das Laden der Seite ausgelöst wird, nachdem der Ansichtszustand geladen wurde.

Verwandte Themen