O que é um postback?

83

A melhor explicação que encontrei para um postBack é no Wiki.

um postback é um HTTP POST para a mesma página em que o formulário está.

Embora o artigo explique como uma segunda página era necessária no ASP, mas não era mais necessária no ASP.NET, ele não fornece muitos detalhes ou antecedentes. Estou procurando um livro de informações sobre PostBacks. Muito parecido com a simples questão de "como posso limpar uma casa" pode ser abordada por este livro de 900 páginas . Não preciso de 900 páginas, mas detalhes, por favor. Eu encontrei um pequeno tutorial bom para o ciclo de vida do ASP.NET, mas ele ignora seriamente os postbacks (entre outras coisas).

Estou olhando para os desenvolvedores que já existiam antes do .NET e realmente não consideram esse tipo de coisa garantida. Livros e hiperlinks são respostas razoáveis ​​ou acréscimos à sua resposta.

P.Brian.Mackey
fonte
Resposta mais correta relacionada a .NET -> stackoverflow.com/questions/183254/what-is-a-postback
Don Cheadle
Para uma função do lado do servidor ASP clássico, isso pode ajudar: stackoverflow.com/a/58054341/8624010
tb-mtg
Esta função do servidor ASP clássico pode ajudar: stackoverflow.com/a/58054341/8624010
tb-mtg

Respostas:

62

Até agora eu vi a resposta certa aludida repetidamente, e quase todo mundo ficou tímido quanto ao que considero subjetivamente ser o alvo.

Vamos começar com o básico:

Uma solicitação HTTP pode ser qualquer um dos verbos HTTP , mas os dois que as pessoas mais usam são GET e POST. Bem, esses são os dois que um programador usa com mais frequência. Todos os outros têm alguma finalidade, se implementados no servidor. Ao enviar informações para o servidor, você pode fazê-lo por meio do uso da URL (para solicitar uma página) ou dentro do corpo da solicitação (POST, PUT, DELETE, por exemplo).

Agora você observará (tenho certeza) que a URL em uma solicitação GET geralmente contém dados, e isso é verdade, mas de acordo com o W3C, você não deve usar GET para alterar o estado, e ainda assim fazemos com frequência. É uma espécie de hack que todos concordamos ser um uso real, e não um hack. Se isso se torna um hack ou um detalhe de implementação real, eu deixo para você.

Então, quando você envia o corpo do POST (ignorando os outros por enquanto, você pode descobrir isso aqui) com os elementos do formulário, você está enviando de volta certos elementos. Como esses elementos são definidos depende de você e do ambiente em que está trabalhando. Você pode postar em um servidor com um elemento JSON no corpo, ou com XML, ou com campos de formulário. Geralmente fazemos postagens de um elemento FORM no corpo do HTML.

Agora todo mundo diz: "ah, um postback é uma solicitação subsequente para uma página". Mas isso não é verdade. Um postback é quando você envia dados via POST -> de volta ao servidor. Digo isso porque a diferença entre uma solicitação GET e uma solicitação POST é se os dados estão incluídos no corpo (e o verbo usado, mas o cliente geralmente sabe como lidar com isso). Você poderia postar na página na primeira vez em que ela fosse visitada e, na verdade, o ASP.NET tem ferramentas para fazer isso na biblioteca. Você certamente poderia ter dados de POST de um cliente de desktop em um servidor (pense no Twitter) sem mostrar nenhuma página da Web do servidor (ok, o Twitter provavelmente não é o melhor conceito para usar como exemplo aqui, mas quero ilustrar que você pode usar um cliente que não mostra a página da web, portanto, nenhuma solicitação é necessária).

Então, o que você realmente deve ler em "postback" é "Estou enviando dados de volta para o servidor para processamento". Presume-se que você recuperou a página inicialmente com um GET para mostrar ao usuário o <form>elemento que possui <input>campos para ele interagir e que no final você está enviando dados de volta. Mas espero que você veja que não precisa estar nessa ordem.

Então, aqui está outra coisa a considerar:

O que se deu ao usuário uma página com um monte de <input>s e nenhum <form>, mas em vez disso, tinha um botão com fio em javascript para concat todos aqueles <input>s com &value-n=e enviá-los como um GET? Faz a mesma coisa, mas viola o conceito de usar apenas GET para solicitações. (possivelmente) a discussão subsequente me incentiva a reforçar que GET não deve ter efeitos colaterais (sem valores de atualização)

É como você pode enviar a alguém um link para uma pesquisa no Google, por exemplo. Portanto, nem SEMPRE precisamos POST BACK para o servidor para obter dados.

Espero que isto ajude. Felicidades

jcolebrand
fonte
1
Does the same thing, but violates that concept of only using GET for requests. (possibly)Possivelmente não sobre isso. As solicitações GET não devem ter efeitos colaterais. Eles devem apenas solicitar dados (daí o nome GET ).
George Marian
34
-1: A questão está marcada como ASP.NET. No ASP.NET, o termo "Postback" tem um significado específico envolvendo eventos de ciclo de vida da página, Viewstate, teste IsPostBack, ...
Ian Mercer
@high M $ pode tentar redefinir o que quiser. No entanto, isso não significa que devemos aceitá-lo.
George Marian
@hightechrider você pode explicar as partes desse ciclo sem a explicação que eu dou?
jcolebrand
2
Então, basicamente, um postback é apenas um POST HTTP para qualquer página?
Koray Tugay
29

POSTBACK: Parte da técnica inventada do ASP.NET para ocultar a verdadeira natureza sem estado da web / HTTP por trás de uma fachada com estado. Isso resulta em um código complexo (IsPostback, ...), um ciclo de vida de página difícil de entender, muitos eventos diferentes, ... e vários problemas (tamanho do ViewState, aderência do web farm, servidores de estado, avisos do navegador (não usando o padrão PRG) , ...)

Em vez disso, consulte ASP.NET MVC .

Ian Mercer
fonte
3
Uau! Sério? Tenho certeza de que ouvi postback usado em referências a outros frameworks além do asp.net ... Não vamos confundir o pobre rapaz.
jcolebrand
3
A questão está marcada como ASP.NET. No contexto do ASP.NET, "Postback" tem um significado específico. Veja, por exemplo: msdn.microsoft.com/en-us/library/…
Ian Mercer
E fora do contexto de postback do ASP.NET ainda é uma ação válida.
jcolebrand
Você deve deixar claro que existem outras definições de trabalho do termo, se você realmente deseja evitar confundir o OP.
George Marian
4
Por muito tempo não sou desenvolvedor da Web da Microsoft, nunca ouvi o termo 'PostBack' fora do contexto .net. Dados de postagem e o termo PostBack são coisas muito diferentes. Esta é uma resposta perfeita.
tommybananas de
28

Consulte Visão geral do ciclo de vida da página ASP.NET no MSDN para obter uma boa introdução geral sobre o que acontece quando uma solicitação chega ao servidor.

Um PostBack é qualquer solicitação de uma página que não seja a primeira solicitação. Um PostBack sempre será em resposta a uma ação do usuário (mais comumente disparada por um botão, controle AutoPostBack ou Ajax).

Yaakov Ellis
fonte
1
Embora este seja um tópico antigo, gostaria de salientar que sua resposta está parcialmente incorreta (para que os outros não se enganem). Você pode apontar a ação do formulário para qualquer URL que desejar, podendo ser a primeira solicitação. O importante é que seja um POST.
Michael Goss
13

Uma postagem é uma viagem de ida e volta do cliente (navegador) para o servidor e depois de volta para o cliente.

Isso permite que sua página passe pelo mecanismo asp no servidor e que qualquer conteúdo dinâmico seja atualizado.

aqui está uma boa explicação

David Kethel
fonte
10

ASP.Net usa um novo conceito (bem, novo em comparação com asp ... é antiquado agora) de ViewState para manter o estado de seus controles asp.net. O que isto significa? Resumindo, se você digitar algo em uma caixa de texto ou selecionar um menu suspenso em uma lista suspensa, ele lembrará os valores quando você clicar em um botão. O asp antigo forçaria você a escrever código para lembrar esses valores.

Isso é útil quando um usuário encontra um erro. Em vez de o programador ter que se lembrar de preencher novamente cada controle da web, o viewstate asp.net faz isso para você automaticamente. Também é útil porque agora o código por trás pode acessar os valores desses controles em seu formulário da web asp.net com o intellisense.

Quanto à postagem na mesma página, sim, um botão "enviar" postará para um manipulador de eventos no código por trás da página. Cabe ao manipulador de eventos no code-behind redirecionar para uma página diferente, se necessário (ou enviar uma mensagem de erro para sua página ou qualquer outra coisa que você precise fazer).

Scottie
fonte
8

A definição de postback da Wikipedia é muito boa, mas eu adicionaria o seguinte: Um postback é um POST HTTP subsequente para a mesma página em que o formulário está.

Se eu tiver uma página com um formulário e, em vez de meu botão Enviar redirecionar o navegador para outra página que processará o formulário, faça com que o botão Enviar atualize a página atual (e execute algumas etapas específicas para validar / salvar o página, presumivelmente), então diz-se que o botão Enviar foi postado de volta na página atual.

Postbacks podem ser completos (atualizar a página inteira) ou parciais (em um caso em que AJAX é empregado). Um postback parcial da página renderizará novamente apenas uma parte da página (como uma única lista suspensa, uma tabela, etc.).

jwheron
fonte
4

No HTML antigo, a única maneira de fazer algo atualizado na página da web é reenviar uma nova página da web para o navegador do cliente. Isso é o que o ASP costumava fazer, você tem que fazer uma coisa chamada "PostBack" para enviar uma página atualizada para o cliente.

No ASP .NET, você não precisa reenviar a página da web inteira. Agora você pode usar AJAX ou outros controles ASP.NET de forma que não precise reenviar a página da web inteira.

Se você visitar algum site antigo, notará que, ao clicar em algo, a página inteira precisa ser atualizada, esse é o ASP antigo. Na maioria dos sites modernos, você notará que seu navegador não precisa atualizar a página inteira, apenas atualiza a parte do conteúdo que precisa ser atualizada. Por exemplo, no Stackoverflow, você vê a página atualizar apenas o conteúdo, não a página da web inteira.

dsum
fonte
Isso é um tanto verdadeiro, mas talvez um pouco enganador. Postbacks padrão do asp.net ENVIAM a página inteira, mais o viewstate, de volta ao servidor e atualizam a página inteira. O AJAX tornou isso um pouco melhor com a capacidade de postar apenas partes da página.
Scottie
3

Basta colocar isso por um pequeno código. Espero que seja útil para você. Quando você primeiro solicita o url da página. você pode visualizar o código-fonte na maioria dos navegadores. Abaixo está uma amostra disso.

O essencial do Post Back é ligar __doPostBackpara o servidor, que envia todos os dados do formulário que você obteve de volta ao servidor. ( __EVENTTARGETcontém o id do controle.)

<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
fonte
2

Postback é uma solicitação durante a qual o ASP restaura os valores das propriedades dos controles do estado de exibição.

Waldemar Gałęzinowski
fonte
1

IsPostBacké uma propriedade da Asp.Netpágina que informa se a página é ou não on its initial loade se um usuário executou um botão em sua página da web que fez com que a página publicasse de volta para si mesma.

mais em ... Asp.Net ispostback ()

Walsh Regal
fonte