Ce qui est une publication?

La meilleure explication que j'ai trouvée pour un postBack est de Wiki.

une publication est une publication HTTP sur la même page que le formulaire.

Alors que l'article explique comment une deuxième page était nécessaire dans ASP, mais plus nécessaire dans ASP.NET, il ne donne pas beaucoup de détails ou d'arrière-plan. Je suis à la recherche d'un tome d'informations sur PostBacks. Tout comme la simple question de "Comment puis-je nettoyer une maison" peut être abordée par ce livre 900 pages . Je vous n'avez pas besoin de 900 pages, mais les détails s'il vous plait. J'ai trouvé un joli petit tutoriel pour ASP.NET cycle de vie, mais il glisse sérieusement sur postbacks (entre autres choses).

Je regarde les développeurs qui ont été autour avant. net et ne prennent vraiment pas ce genre de choses pour acquis. Les livres et les hyperliens sont des réponses raisonnables ou des ajouts à votre réponse.

76
demandé sur dariom 2010-11-23 02:10:36

10 réponses

Jusqu'à présent, j'ai vu la bonne réponse faire allusion à plusieurs reprises, et presque tout le monde est venu timide de ce que je considère subjectivement comme la marque.

Commençons par les bases:

Une requête HTTP peut être l'un des verbes HTTP , mais les deux que les gens utilisent le plus sont GET et POST. Eh bien, ce sont les deux qu'un programmeur utilise le plus souvent. Les autres ont tous un but, s'ils sont implémentés sur le serveur. Lorsque vous envoyez des informations au serveur, vous pouvez le faire soit par L'utilisation de L'URL (pour demander une page) ou dans le corps de la requête (POST, PUT, DELETE, par exemple).

Maintenant, vous remarquerez (j'en suis sûr) que l'URL d'une requête GET contient souvent des données, et c'est vrai, mais selon le W3C, vous ne devriez pas utiliser GET pour modifier l'état, et pourtant nous le faisons souvent. Il est une sorte de hack que nous sommes tous d'accord est une utilisation réelle, et non un hack. Que ce soit un hack ou un détail de mise en œuvre réelle, je laisse à vous.

Donc quand vous envoyez le corps du POST (en sautant les autres pour l'instant, vous pouvez le comprendre à partir d'ici) avec les éléments de formulaire, vous renvoyez certains éléments. La définition de ces éléments dépend de vous et de l'environnement dans lequel vous travaillez. Vous pouvez poster sur un serveur avec un élément JSON dans le corps, ou avec XML, ou avec des champs de formulaire. Généralement, nous publions à partir d'un élément de formulaire dans le body du HTML.

Maintenant tout le monde dit, "oh, une publication est une requête vers une page." Mais, ce n'est pas vrai. Une publication est lorsque vous envoyez des données via POST - > retour au serveur. Je dis cela parce que la différence entre une requête GET et une requête POST est que les données sont incluses dans le corps (et le verbe utilisé, mais le client sait généralement comment y faire face). Vous pourriez publier sur la page la première fois que la page est visitée, et en fait ASP.NET a des outils pour le faire dans la bibliothèque. Vous pourriez certainement avoir un client de bureau poster des données sur un serveur (pensez Twitter) sans montrer n'importe quelle page Web du serveur (ok, donc twitter n'est probablement pas le meilleur concept à utiliser pour un exemple ici, mais je veux illustrer que vous pouvez utiliser un client qui ne montre pas la page web, donc aucune demande n'est nécessaire).

Donc vraiment ce que vous devriez lire dans "postback" est "je poste des données sur le serveur pour le traitement". Il est présumé que vous avez récupéré la page initialement avec un GET pour montrer à l'utilisateur l'élément <form> qui a des champs <input> avec lesquels ils peuvent interagir, et qu'à la fin, vous renvoyez des données. Mais j'espère que vous pouvez voir que cela ne doit pas être dans cet ordre.

Voici donc autre chose à considérer:

Et si vous donniez à l'utilisateur une page avec un tas de <input> s et pas de <form> mais à la place, avait un bouton câblé en javascript pour concatter tous ces <input> s avec &value-n= et les envoyer en tant que GET? Fait la même chose, mais viole ce concept d'utiliser uniquement GET pour les requêtes. (éventuellement) la discussion qui a suivi m'encourage à renforcez que GET ne devrait pas avoir d'effets secondaires (pas de valeurs de mise à jour)

C'est pourquoi vous pouvez envoyer à quelqu'un un lien vers une recherche google, par exemple. Donc, nous n'avons pas toujours à poster sur le serveur pour obtenir des données.

J'espère que cela aide. Cheers

57
répondu jcolebrand 2018-04-17 01:46:46

POSTBACK: partie de ASP.NET la technique artificielle pour cacher la véritable nature apatride du Web / HTTP derrière une façade avec État. Il en résulte un code complexe (IsPostback, ...), un cycle de vie de page difficile à comprendre, de nombreux événements différents, ... et de nombreux problèmes (taille ViewState, Web-Farm stickyness, serveurs d'état, avertissements de navigateur (ne pas utiliser le modèle PRG),...)

Voir ASP.NET MVC à la place.

26
répondu Ian Mercer 2010-11-22 23:21:00

Voir ASP.NET présentation du Cycle de vie de la Page sur MSDN pour une bonne introduction générale sur ce qui se passe quand une requête frappe le serveur.

Une Publication est toute requête pour une page n'est pas la première demande. Une publication sera toujours en réponse à une action de l'utilisateur (déclenchée le plus souvent par un bouton, le contrôle AutoPostBack ou Ajax).

25
répondu Yaakov Ellis 2010-11-22 23:20:49

Un Retour post est aller-retour du client (Navigateur) au serveur, puis retour au client.

Cela vous permet de passer par le moteur asp sur le serveur et tout Contenu dynamique à mettre à jour.

Voici une belle explication

11
répondu David Kethel 2010-11-22 23:16:25

ASP.Net utilise un nouveau concept (bien, nouveau par rapport à asp... il est désuet maintenant) de ViewState pour maintenir l'état de votre asp.net contrôles. Qu'est-ce que cela signifie? En un mot, si vous tapez quelque chose dans une zone de texte ou sélectionnez une liste déroulante à partir d'une liste déroulante, il se souviendra des valeurs lorsque vous cliquez sur un bouton. Old asp vous obligerait à écrire du code pour vous souvenir de ces valeurs.

Ceci est utile si un utilisateur rencontre une erreur. Au lieu d'avoir à traiter avec le programmeur en se souvenant de Ré-remplir chaque contrôle web, le asp.net viewstate fait cela pour vous automatiquement. C'est également utile car maintenant le code derrière peut accéder aux valeurs de ces contrôles sur votre asp.net formulaire web avec intellisense.

En ce qui concerne la publication sur la même page, oui, un bouton "Soumettre" affichera à un gestionnaire d'événements sur le code derrière la page. Il appartient au gestionnaire d'événements dans le code derrière de rediriger vers une page différente si nécessaire (ou de servir un message d'erreur sur votre page ou tout ce que vous pourriez avoir besoin de faire).

9
répondu Scottie 2010-11-22 23:16:28

La définition Wikipedia de postback est assez bonne, mais j'ajouterais ce qui suit: Une publication est un ultérieure HTTP POST sur la même page que le formulaire est sur.

Si j'ai une page avec un formulaire et que, plutôt que d'avoir mon bouton de soumission rediriger le navigateur vers une autre page qui traitera le formulaire, le bouton de soumission actualise la page en cours (et effectue quelques étapes spécifiques pour valider/enregistrer la page, vraisemblablement), alors que Le bouton Soumettre est dit avoir posté à la page en cours.

Les Postbacks peuvent être complets (actualiser la page entière) ou partiels (dans un cas où AJAX est utilisé). Une publication partielle de page ne restituera qu'une partie de la page (comme une seule liste déroulante, une table, etc.).

6
répondu jwheron 2010-11-22 23:21:28

Dans L'ancien HTML, la seule façon de mettre à jour quelque chose sur la page web est de renvoyer une nouvelle page Web au navigateur client. C'est ce que ASP avait l'habitude de faire, vous devez faire cette chose appeler un "PostBack" pour envoyer une page mise à jour au client.

Dans ASP. NET, vous n'avez pas à renvoyer la page Web entière. Vous pouvez maintenant utiliser AJAX, ou autre ASP.NET contrôles tels que vous n'avez pas à renvoyer la page Web entière.

Si vous visitez un ancien site Web, vous remarquerez qu'une fois que vous cliquez quelque chose, la page entière doit être rafraîchie, c'est l'ancien ASP. Dans la plupart des sites Web modernes, vous remarquerez que votre navigateur n'a pas à actualiser toute la page, il ne met à jour que la partie du contenu qui doit être mise à jour. Par exemple, dans Stackoverflow, vous voyez la page Mettre à jour uniquement le contenu, pas la page Web entière.

4
répondu dsum 2010-11-22 23:16:05

Mettez simplement cela par un petit code. J'espère que c'est utile pour vous. Lorsque vous demandez d'abord l'url de la page. vous pouvez afficher le code source de l'informatique dans la plupart des navigateurs. Ci-dessous est un échantillon .

L'essentiel de Post Back est en fait d'appeler le __doPostBack qui soumet toutes les données de formulaire obtenues de votre demande initiale au serveur. (__EVENTTARGET contient l'id du contrôle.)

<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>
3
répondu Joe.wang 2014-03-07 10:09:49

IsPostBack est une propriété de la page Asp.Net qui indique si la page est on its initial load et si un utilisateur a effectué un bouton sur votre page web qui a provoqué la publication de la page à elle-même.

Plus sur ... Asp.Net ispostback()

1
répondu Walsh Regal 2013-12-30 06:47:20

Postback est une requête au cours de laquelle ASP restaure les valeurs des propriétés des contrôles à partir de l'état de la vue.

1
répondu Waldemar Gałęzinowski 2017-03-27 09:16:27