Was ist ein Postback?

83

Die beste Erklärung, die ich für ein PostBack gefunden habe, stammt aus dem Wiki.

Ein Postback ist ein HTTP-POST auf derselben Seite, auf der sich das Formular befindet.

Der Artikel erklärt zwar, wie eine zweite Seite in ASP benötigt wurde, in ASP.NET jedoch nicht mehr benötigt wird, enthält jedoch nicht viele Details oder Hintergrundinformationen. Ich suche nach einer verdammten Menge an Informationen über PostBacks. Ähnlich wie die einfache Frage "Wie kann ich ein Haus putzen?" Kann dieses Buch mit 900 Seiten behandelt werden . Ich brauche keine 900 Seiten, aber Details bitte. Ich habe ein nettes kleines Tutorial für den ASP.NET-Lebenszyklus gefunden, das jedoch (unter anderem) Postbacks ernsthaft beschönigt.

Ich freue mich auf die Entwickler, die schon vor .NET waren und solche Dinge wirklich nicht für selbstverständlich halten. Bücher und Hyperlinks sind sinnvolle Antworten oder Ergänzungen zu Ihrer Antwort.

P.Brian.Mackey
quelle
Die richtigste Antwort in Bezug auf .NET -> stackoverflow.com/questions/183254/what-is-a-postback
Don Cheadle
Für eine klassische serverseitige ASP-Funktion kann dies hilfreich sein: stackoverflow.com/a/58054341/8624010
tb-mtg
Diese klassische serverseitige ASP-Funktion kann helfen: stackoverflow.com/a/58054341/8624010
tb-mtg

Antworten:

62

Bisher habe ich wiederholt die richtige Antwort gesehen, auf die angespielt wurde, und fast jeder hat sich gescheut, was ich subjektiv als Marke betrachte.

Beginnen wir mit den Grundlagen:

Eine HTTP-Anforderung kann eines der HTTP-Verben sein , aber die beiden, die am häufigsten verwendet werden, sind GET und POST. Nun, das sind die beiden, die ein Programmierer am häufigsten verwendet. Die anderen haben alle einen Zweck, wenn sie auf dem Server implementiert sind. Wenn Sie Informationen an den Server senden, können Sie dies entweder über die URL (zum Anfordern einer Seite) oder innerhalb des Hauptteils der Anforderung (z. B. POST, PUT, DELETE) tun.

Jetzt werden Sie bemerken (ich bin sicher), dass die URL in einer GET-Anfrage häufig Daten enthält, und dies ist wahr, aber laut W3C sollten Sie GET nicht verwenden, um den Status zu ändern, und dennoch tun wir dies häufig. Es ist eine Art Hack, dem wir alle zustimmen, dass es sich um eine tatsächliche Verwendung handelt und nicht um einen Hack. Ob dies ein Hack oder ein tatsächliches Implementierungsdetail ist, überlasse ich Ihnen.

Wenn Sie also den Hauptteil des POST mit den Formularelementen senden (wobei Sie die anderen vorerst überspringen, können Sie dies von hier aus herausfinden), senden Sie bestimmte Elemente zurück. Wie diese Elemente definiert sind, hängt von Ihnen und der Umgebung ab, in der Sie arbeiten. Sie können auf einem Server mit einem JSON-Element im Hauptteil, mit XML oder mit Formularfeldern posten. Im Allgemeinen haben wir Beiträge aus einem FORM - Elemente in dem Körper des HTML.

Jetzt sagt jeder: "Oh, ein Postback ist eine nachfolgende Anfrage an eine Seite." Das stimmt aber nicht. Ein Postback ist, wenn Sie Daten per POST -> zurück an den Server senden. Ich sage dies, weil der Unterschied zwischen einer GET-Anfrage und einer POST-Anfrage darin besteht, dass Daten im Body enthalten sind (und das verwendete Verb, aber der Client weiß normalerweise, wie er damit umgehen soll). Sie können beim ersten Besuch der Seite ein Postback auf die Seite durchführen, und tatsächlich verfügt ASP.NET über Tools, die dies in der Bibliothek tun. Sie könnten sicherlich einen Desktop-Client POST-Daten auf einem Server haben (denken Sie an Twitter), ohne überhaupt eine Webseite vom Server anzuzeigen (ok, also ist Twitter wahrscheinlich nicht das beste Konzept, um hier ein Beispiel zu verwenden, aber ich möchte Ihnen das veranschaulichen kann einen Client verwenden, der die Webseite nicht anzeigt, daher ist keine Anforderung erforderlich).

Was Sie dort in "Postback" wirklich lesen sollten, ist "Ich poste Daten zur Verarbeitung zurück an den Server". Es wird davon ausgegangen, dass Sie die Seite zunächst mit einem GET abgerufen haben, um dem Benutzer das <form>Element anzuzeigen, über das <input>Felder für die Interaktion verfügen, und dass Sie am Ende Daten zurücksenden. Aber ich hoffe, Sie können sehen, dass es nicht in dieser Reihenfolge sein muss.

Hier ist noch etwas zu beachten:

Was wäre, wenn Sie dem Benutzer eine Seite mit einer Reihe von <input>s und nein geben würden, <form>aber stattdessen eine in Javascript verdrahtete Schaltfläche hätten, mit der alle diese <input>s verknüpft &value-n=und als GET gesendet werden könnten? Tut das Gleiche, verstößt jedoch gegen das Konzept, GET nur für Anforderungen zu verwenden. (möglicherweise) die anschließende Diskussion ermutigt mich zu bekräftigen, dass GET keine Nebenwirkungen haben sollte (keine Aktualisierung der Werte)

So können Sie beispielsweise jemandem einen Link zu einer Google-Suche senden. Wir müssen also nicht IMMER auf den Server zurückschicken, um Daten zu erhalten.

Hoffe das hilft. Prost

jcolebrand
quelle
1
Does the same thing, but violates that concept of only using GET for requests. (possibly)Nein, möglicherweise darüber. GET-Anfragen sollten keine Nebenwirkungen haben. Sie sollten lediglich Daten anfordern (daher der Name GET ).
George Marian
34
-1: Die Frage ist mit ASP.NET gekennzeichnet. In ASP.NET hat der Begriff "Postback" eine spezifische Bedeutung, die Seitenlebenszyklusereignisse, Viewstate, Testen von IsPostBack, ...
Ian Mercer
@high M $ kann versuchen, das zu definieren, was sie wollen. Das heißt aber nicht, dass wir es akzeptieren müssen.
George Marian
@hightechrider Kannst du die Teile dieses Zyklus ohne die Erklärung erklären, die ich gebe?
Jcolebrand
2
Ein Postback ist also im Grunde nur ein HTTP-POST für eine Seite?
Koray Tugay
29

POSTBACK: Teil der von ASP.NET erfundenen Technik, um die wahre Staatenlosigkeit des Web / HTTP hinter einer zustandsbehafteten Fassade zu verbergen. Dies führt zu komplexem Code (IsPostback, ...), einem schwer verständlichen Seitenlebenszyklus, vielen verschiedenen Ereignissen ... und zahlreichen Problemen (ViewState-Größe, Webfarm-Stickyness, Statusserver, Browser-Warnungen (ohne PRG-Muster)). , ...)

Siehe stattdessen ASP.NET MVC .

Ian Mercer
quelle
3
Wow wirklich? Ich bin mir ziemlich sicher, dass ich Postback gehört habe, das in Verweisen auf andere Frameworks neben asp.net verwendet wird ... Lassen Sie uns den armen Jungen nicht verwirren.
Jcolebrand
3
Die Frage ist mit ASP.NET gekennzeichnet. Im Kontext von ASP.NET hat "Postback" eine bestimmte Bedeutung. Siehe zum Beispiel: msdn.microsoft.com/en-us/library/…
Ian Mercer
Und außerhalb des Kontexts von ASP.NET ist Postback immer noch eine gültige Aktion.
Jcolebrand
Sie sollten klarstellen, dass es andere Arbeitsdefinitionen des Begriffs gibt, wenn Sie das OP wirklich nicht verwirren möchten.
George Marian
4
Als langjähriger Nicht-Microsoft-Webentwickler habe ich den Begriff "PostBack" außerhalb des .net-Kontexts noch nie gehört. Posting-Daten und der Begriff PostBack sind sehr unterschiedliche Dinge. Dies ist eine perfekte Antwort.
Tommybananas
28

Unter Übersicht über den ASP.NET-Seitenlebenszyklus auf MSDN finden Sie eine gute allgemeine Einführung darüber, was passiert, wenn eine Anforderung den Server erreicht.

Ein PostBack ist eine Anfrage für eine Seite, die die nicht die erste Anforderung ist. Ein PostBack reagiert immer auf eine Benutzeraktion (am häufigsten durch eine Schaltfläche, ein AutoPostBack-Steuerelement oder Ajax ausgelöst).

Yaakov Ellis
quelle
1
Obwohl dies ein altes Thema ist, wollte ich darauf hinweisen, dass Ihre Antwort teilweise falsch ist (damit andere nicht irreführen). Sie können die Formularaktion auf eine beliebige URL verweisen, da dies die erste Anforderung sein kann. Wichtig ist, dass es sich um einen POST handelt.
Michael Goss
13

Ein Post-Back ist eine Hin- und Rückfahrt vom Client (Browser) zum Server und dann zurück zum Client.

Auf diese Weise können Sie die Asp-Engine auf dem Server durchlaufen und alle dynamischen Inhalte aktualisieren.

Hier ist eine schöne Erklärung

David Kethel
quelle
10

ASP.Net verwendet ein neues Konzept (nun ja, neu im Vergleich zu asp ... es ist jetzt veraltet) von ViewState, um den Status Ihrer asp.net-Steuerelemente beizubehalten. Was bedeutet das? Kurz gesagt, wenn Sie etwas in ein Textfeld eingeben oder ein Dropdown-Menü aus einer Dropdown-Liste auswählen, werden die Werte gespeichert, wenn Sie auf eine Schaltfläche klicken. Altes Asp würde Sie zwingen, Code zu schreiben, um sich diese Werte zu merken.

Dies ist nützlich, wenn ein Benutzer auf einen Fehler stößt. Anstatt dass sich der Programmierer daran erinnern muss, jedes Websteuerelement neu zu füllen, erledigt der asp.net-Ansichtsstatus dies automatisch für Sie. Dies ist auch nützlich, da der dahinter stehende Code jetzt mit Intellisense auf die Werte dieser Steuerelemente in Ihrem asp.net-Webformular zugreifen kann.

Ja, wenn Sie auf derselben Seite posten, wird eine Schaltfläche "Senden" an einen Ereignishandler im Code hinter der Seite gesendet. Es liegt an der Ereignisbehandlungsroutine im Code dahinter, bei Bedarf auf eine andere Seite umzuleiten (oder eine Fehlermeldung an Ihre Seite zu senden oder was auch immer Sie sonst tun müssen).

Scottie
quelle
8

Die Wikipedia-Definition von Postback ist ziemlich gut, aber ich möchte Folgendes hinzufügen: Ein Postback ist ein nachfolgendes HTTP-POST auf derselben Seite, auf der sich das Formular befindet.

Wenn sich auf einer Seite ein Formular befindet und der Browser nicht über meine Schaltfläche "Senden" auf eine andere Seite umgeleitet wird, auf der das Formular verarbeitet wird, aktualisieren Sie stattdessen die aktuelle Seite mit der Schaltfläche "Senden" (und führen Sie einige bestimmte Schritte aus, um das Formular zu überprüfen / zu speichern Seite, vermutlich), dann soll diese Schaltfläche " Senden" wieder auf die aktuelle Seite gepostet haben .

Postbacks können entweder vollständig (die gesamte Seite aktualisieren) oder teilweise (in einem Fall, in dem AJAX verwendet wird) sein. Bei einem teilweisen Seiten-Postback wird nur ein Teil der Seite neu gerendert (z. B. eine einzelne Dropdown-Liste, eine Tabelle usw.).

jwheron
quelle
4

Im alten HTML besteht die einzige Möglichkeit, etwas auf der Webseite zu aktualisieren, darin, eine neue Webseite erneut an den Client-Browser zu senden. Das war es, was ASP früher getan hat. Sie müssen dies tun, indem Sie ein "PostBack" aufrufen, um eine aktualisierte Seite an den Client zu senden.

In ASP .NET müssen Sie nicht die gesamte Webseite erneut senden. Sie können jetzt AJAX oder andere ASP.NET-Steuerelemente verwenden, sodass Sie nicht die gesamte Webseite erneut senden müssen.

Wenn Sie eine alte Website besuchen, werden Sie feststellen, dass die gesamte Seite aktualisiert werden muss, sobald Sie auf etwas klicken. Dies ist der alte ASP. In den meisten modernen Websites werden Sie feststellen, dass Ihr Browser nicht die gesamte Seite aktualisieren muss, sondern nur den Teil des Inhalts, der aktualisiert werden muss. In Stackoverflow wird beispielsweise angezeigt, dass die Seite nur den Inhalt und nicht die gesamte Webseite aktualisiert.

dsum
quelle
Das ist etwas wahr, aber vielleicht etwas irreführend. Standard asp.net Postbacks Senden Sie die gesamte Seite sowie den Ansichtsstatus zurück an den Server und aktualisieren Sie die gesamte Seite. AJAX hat dies ein bisschen schöner gemacht, da nur Teile der Seite zurückgesendet werden können.
Scottie
3

Setzen Sie dies einfach durch einen kleinen Code. Hoffe es ist hilfreich für dich. Wenn Sie zuerst die Seiten-URL anfordern. Sie können den Quellcode in den meisten Browsern anzeigen. Unten finden Sie ein Beispiel dafür.

Das Wesentliche bei Post Back ist __doPostBack, dass Sie alle Formulardaten, die Sie von Ihrer ersten Anfrage erhalten haben, an den Server zurücksenden. ( __EVENTTARGETenthält die ID des Steuerelements.)

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
    NHibernate Demo
</title>
    <script language="javascript" type="text/javascript">
        function dopost() {
                __doPostBack('LinkButton1', '');    
        }
    </script>
</head>
<body>
    <h1>NHibernate Demo</h1>    
    <form name="ctl01" method="post" action="Default.aspx" id="ctl01">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTMxNzcwNTYyMWRkKHoXAC3dty39nROvcj1ZHqZ5FYY=" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['ctl01'];
if (!theForm) {
    theForm = document.ctl01;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>   
<div>
    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="B2D7F301" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwKZx5vTCgKM54rGBgLM9PumD20dn9KQguomfpAOdTG0r9Psa7al" />
</div>
        <a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
        <input type="button" value="testPostBack" id="testpostback" onclick="dopost();" />
    </form>
</body>
</html>
Joe.wang
quelle
2

Postback ist eine Anforderung, bei der ASP Werte der Eigenschaften von Steuerelementen aus dem Ansichtsstatus wiederherstellt.

Waldemar Gałęzinowski
quelle
1

IsPostBackist eine Eigenschaft der Asp.NetSeite, die angibt, ob die Seite vorhanden ist oder nicht on its initial loadund ob ein Benutzer eine Schaltfläche auf Ihrer Webseite ausgeführt hat, die dazu geführt hat, dass die Seite wieder auf sich selbst gepostet wurde.

mehr zu ... Asp.Net ispostback ()

Walsh Regal
quelle