2010-09-01 4 views
19

Je mehr ich verwende ASP.NET, desto mehr if (!IsPostBack) {} sinnlos scheint ...Implementierung von IsPostBack in Seitenlade

Erstes Beispiel:

Zum Beispiel habe ich ein Problem, gerade gegoogelt, sagten, dass sie dies als Teil der Lösung:

Was genau wie codiert funktioniert, wird LoadComplete nur auf die erste Ladung ausgelöst. Nach dem Klicken auf eine Schaltfläche oder irgendetwas, das ein Postback auslöst, wird das LoadComplete-Ereignis nicht ausgehakt und überspringt den Ereignishandler. Daher funktioniert ihr "Fix" nur bei der ersten Ladung = wertlos. Ich habe die if (!Page.IsPostBack) {} sofort auskommentiert und jetzt löst das Ereignis immer wie gewünscht aus.

Zweites Beispiel:

Ich bin versucht, Ereignisse in einer dynamisch erzeugten Schaltfläche Haken (die übrigens, ich kann nicht an die Arbeit [GRR!]). Ich sehe Beispiele dies zeigen:

myEditToggleButton = new Button(); 
myEditToggleButton.ID = "editToggleButton"; 
//^GOTTA HAVE THIS FOR EVENTS TO WORK! (supposedly, I haven't seen it work...) 
if (!IsPostBack) 
{ 
    myEditToggleButton.Click += new EventHandler(myEditToggleButton_Click); 
} 
Controls.Add(myEditToggleButton); 

Wie das erste Beispiel, mein Verständnis ist, dass das Ereignis nicht nach der ersten Seite Last angeschlossen werden würde, so ist die Taste „inert“ nach einem Klick (weil Anklicken einer ausgelöst Postback).

Frage:

Wann sollten Sie if (!IsPostBack) {} verwenden? Ich vermute, es hat nur mit Markup-Steuerelementen zu tun.

+0

Ehrlich gesagt, ist jeder Code im Load-Event, der nicht in einem! Page.IsPostBack eingeschlossen ist, eine rote Flagge für mich während Code-Überprüfungen. Es deutet oft auf ein Missverständnis der Funktionsweise von Webforms hin, insbesondere im Hinblick auf die Datenbindung. –

Antwort

15

Kurz gesagt, verwenden Sie es jedes Mal wenn Sie etwas, das nur beim ersten Laden ausführen müssen .

Die klassische Verwendung von Page.IsPostBack ist Datenbindung/Steuerelement Initialisierung.

if(!Page.IsPostBack) 
{ 
    //Control Initialization 
    //Databinding 
} 

Dinge, die auf ViewState und ControlState beibehalten werden müssen nicht auf jedem Postback neu erstellt werden, so dass Sie für diesen Zustand, um den Check unnötigen Code zu vermeiden, ausgeführt wird.

Eine weitere klassische Anwendung ist das Erhalten und Verarbeiten von Querystring Parametern. Sie müssen dies beim Postback nicht tun.

+0

Ja, Viewstate ist definitiv die Hauptkraft hinter der Verwendung – Jared

4

Es ist für die Verarbeitung von Formulardaten.

Wenn Sie mit POST-Daten arbeiten möchten, möchten Sie dies nur tun, wenn die Seite tatsächlich Daten gepostet hat, nicht beim ersten Laden. Daher das IsPostBack-Flag.

6

Wenn der Vorgang nicht anders als beim ersten Mal wiederholt werden muss.

Verwenden Sie es mit kostspieligen Operationen (z. B. Abrufen von Daten aus einer Datenbank oder Auffüllen von ListItems), die nur beim ersten Laden der Seite oder des Steuerelements ausgeführt werden müssen. Wenn die Seite auf dem Server veröffentlicht und dann erneut geladen wird, muss der Vorgang nicht wiederholt werden. Wenn Sie den Wert von IsPostBack testen, können Sie die teure Operation

+1

Mit dynamisch hinzugefügten Steuerelementen verdampfen sie jedoch. Wenn Sie beispielsweise eine Dropdown-Liste dynamisch hinzugefügt haben, wären die Elemente innerhalb der Dropdown-Liste mit der Dropdown-Box selbst verdampft worden. – Yerg

+0

@Yerg, dann müssten Sie diese Steuerelemente vor dem if (! IsPostBack) hinzufügen – harpo

+0

@Yerg diese Seite sollte Ihnen helfen, IsPostBack in Bezug auf dynamische Steuerelemente zu verstehen. http://forums.asp.net/t/1186195.aspx –

3

überspringen. Was passieren kann, wenn Sie ein Postback verursachen, können Sie den Status Ihrer Steuerelemente ändern, ohne dies zu tun. Wenn Sie beispielsweise während des Bearbeitungsmodus eine Postback-Funktion verwenden, haben Sie keinen Zugriff mehr auf Ihre bearbeiteten Felder.

Oft müssen Sie die Informationen von disapearing auf einer Seite zu erhalten, wenn Sie den Server schlagen, das ist der Punkt, der

if(!Page.IsPostBack) 
1

Ihre Event-Handler verdrahtet werden sollte, wann immer kann das Ereignis (unabhängig von Postback-Status)

auch abgefeuert werden, wenn Steuerelemente dynamisch hinzufügen, müssen Sie die asp page lifecycle

0

Auch müssen Sie verwenden, zu beobachten, IsPostBack, wenn Sie die Steuerelemente initialisieren möchten, andernfalls werden sie bei jedem Ladevorgang auf den Standardwert zurückgesetzt. Dies verwirrt den Benutzer, wenn er versucht, das Formular zu verwenden, dessen eingegebene Werte auf Ihre Standardeinstellungen zurückgesetzt werden.

1
protected void Page_Load(object sender, EventArgs e)    
{ 
    if (!IsPostBack) { 
     SqlConnection conn = new SqlConnection("Data Source=-----; Database=-----; Integrated Security=True"); 
     SqlDataAdapter da = new SqlDataAdapter(); 
     conn.Open(); 
     da.SelectCommand = new SqlCommand("Select Command",conn); 
     conn.Close(); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     ddlSearch.DataSource = dt; 
     ddlSearch.DataTextField = "---"; 
     ddlSearch.DataValueField = "---"; 
     ddlSearch.DataBind(); 
    } 
} 
+0

Einige Erklärung dieses Codes wäre nett gewesen –

0

Zuerst müssen Sie verstehen, was Postbacks ist, wenn Sie das Projekt in Visual Studio starten,
, wenn Sie ein if statement haben, die überprüft, ob isPostBack sind true oder false in Ihrer Page_Load Methode, an dieser Stelle, isPostBack ist false, bedeutet, dass es kein postback ist, dann was ist Postback,
jetzt klicken Sie auf button (wenn Sie keine Schaltfläche haben, fügen Sie bitte eine und die Schaltfläche Klick-Methode als auch), an dieser Stelle senden Sie ein Anfrage zurück an den Server, der Server antwortet dann, dieser Prozess so postback genannt wird, die durch Klicken auf die button ausgelöst wird,

eine Sache, die Sie wirklich bemerken müssen, die Page_Load Verfahren erneut ausgeführt, nicht nur die Button_click Verfahren ausgeführt werden, so dass nun die isPostBack ist true , bedeutet, es ist Postback, ja, es ist wirklich ein Postback, weil Sie auf die Schaltfläche geklickt haben.