¿Qué es una devolución de datos?


83

La mejor explicación que he encontrado para un postBack es de Wiki.

una devolución de datos es un POST HTTP a la misma página en la que se encuentra el formulario.

Si bien el artículo explica cómo se necesitaba una segunda página en ASP, pero ya no se necesita en ASP.NET, no brinda muchos detalles ni antecedentes. Estoy buscando un maldito tomo de información sobre PostBacks. Al igual que la simple pregunta de "¿cómo puedo limpiar una casa?" Puede abordarse en este libro de 900 páginas . No necesito 900 páginas, pero detalles por favor. Encontré un pequeño tutorial agradable para el ciclo de vida de ASP.NET, pero pasa por alto seriamente las devoluciones de datos (entre otras cosas).

Estoy buscando a los desarrolladores que han existido antes de .NET y realmente no dan este tipo de cosas por sentado. Los libros y los hipervínculos son respuestas razonables o adiciones a su respuesta.


Respuesta más correcta relacionada con .NET -> stackoverflow.com/questions/183254/what-is-a-postback
Don Cheadle

Para una función clásica del lado del servidor ASP, esto puede ayudar: stackoverflow.com/a/58054341/8624010
tb-mtg

Esta función clásica del lado del servidor ASP puede ayudar: stackoverflow.com/a/58054341/8624010
tb-mtg

Respuestas:


62

Hasta ahora he visto la respuesta correcta a la que se alude repetidamente, y casi todos se han avergonzado de lo que yo considero subjetivamente la marca.

Empecemos con lo básico:

Una solicitud HTTP puede ser cualquiera de los verbos HTTP , pero los dos que la gente usa más son GET y POST. Bueno, esos son los dos que un programador usa con más frecuencia. Todos los demás tienen algún propósito, si se implementan en el servidor. Cuando envía información al servidor, puede hacerlo a través del uso de la URL (para solicitar una página) o dentro del cuerpo de la solicitud (POST, PUT, DELETE, por ejemplo).

Ahora observará (estoy seguro) que la URL en una solicitud GET a menudo contiene datos, y esto es cierto, pero de acuerdo con W3C, no debe usar GET para alterar el estado y, sin embargo, lo hacemos a menudo. Es una especie de truco que todos estamos de acuerdo en que es un uso real, no un truco. Si eso lo convierte en un truco o un detalle de implementación real, lo dejo a usted.

Entonces, cuando envía el cuerpo del POST (omitiendo los demás por ahora, puede averiguarlo desde aquí) con los elementos del formulario, está devolviendo ciertos elementos. Como estos elementos se definen depende de usted y para el medio ambiente que se está trabajando. Usted podría publicar en un servidor con un elemento de JSON en el cuerpo, o con XML, o con campos de formulario. Generalmente hacemos publicaciones desde un elemento FORM en el cuerpo del HTML.

Ahora todo el mundo dice: "Oh, una devolución de datos es una solicitud posterior a una página". Pero eso no es cierto. Una devolución de datos es cuando envía datos a través de POST -> de vuelta al servidor. Digo esto porque la diferencia entre una solicitud GET y una solicitud POST es si los datos están incluidos en el cuerpo (y el verbo utilizado, pero el cliente generalmente sabe cómo lidiar con eso). Usted podría devolución de datos a la página en la primera vez que la página es visitada, y de hecho ASP.NET tiene herramientas para hacer que en la biblioteca. Ciertamente, podría tener datos POST de un cliente de escritorio en un servidor (piense en Twitter) sin mostrar ninguna página web desde el servidor (de acuerdo, entonces Twitter probablemente no sea el mejor concepto para usar como ejemplo aquí, pero quiero ilustrar que usted puede usar un cliente que no muestra la página web, por lo que no es necesaria ninguna solicitud).

Entonces, realmente lo que debería leer allí en "postback" es "Estoy PUBLICANDO datos DEVOLVER al servidor para su procesamiento". Se presume que recuperó la página inicialmente con un GET para mostrarle al usuario el <form>elemento que tiene <input>campos con los que interactuar, y que al final está devolviendo datos. Pero espero que pueda ver que no tiene que estar en ese orden.

Entonces, aquí hay algo más a considerar:

¿Qué pasa si le dio al usuario una página con un montón de <input>s y ningún <form>pero en cambio, tenía un botón de cableado en javascript a concat todas esas <input>s con &value-n=y enviarlos como un GET? Hace lo mismo, pero viola el concepto de usar GET solo para solicitudes. (posiblemente) la discusión subsiguiente me anima a reforzar que GET no debería tener efectos secundarios (no actualizar los valores)

Es por eso que puedes enviarle a alguien un enlace a una búsqueda de Google, por ejemplo. Por lo tanto, no SIEMPRE tenemos que REGRESAR al servidor para obtener datos.

Espero que esto ayude. Salud


1
Does the same thing, but violates that concept of only using GET for requests. (possibly)Posiblemente no sobre eso. Las solicitudes GET no deberían tener efectos secundarios. Simplemente deben solicitar datos (de ahí el nombre GET ).
George Marian

34
-1: La pregunta tiene la etiqueta ASP.NET. En ASP.NET, el término "Postback" tiene un significado específico que involucra eventos del ciclo de vida de la página, Viewstate, prueba de IsPostBack, ...
Ian Mercer

@high M $ puede intentar redefinir lo que quieren. Sin embargo, eso no significa que tengamos que aceptarlo.
George Marian

@hightechrider ¿puedes explicar las partes de ese ciclo sin la explicación que doy?
jcolebrand

2
Entonces, básicamente, ¿una devolución de datos es solo un POST HTTP en cualquier página?
Koray Tugay

29

POSTBACK: Parte de la técnica artificial de ASP.NET para ocultar la verdadera naturaleza sin estado de la web / HTTP detrás de una fachada con estado. Esto da como resultado un código complejo (IsPostback, ...), un ciclo de vida de la página difícil de entender, muchos eventos diferentes, ... y numerosos problemas (tamaño de ViewState, adherencia de la granja web, servidores de estado, advertencias del navegador (sin usar el patrón PRG) , ...)

Consulte ASP.NET MVC en su lugar.


3
¿Wow en serio? Estoy bastante seguro de que he escuchado el uso de postback en referencias a otros frameworks además de asp.net ... No confundamos al pobre muchacho.
jcolebrand

3
La pregunta tiene la etiqueta ASP.NET. En el contexto de ASP.NET, "Postback" tiene un significado específico. Ver por ejemplo: msdn.microsoft.com/en-us/library/…
Ian Mercer

Y fuera del contexto de la devolución de datos de ASP.NET sigue siendo una acción válida.
jcolebrand

Debe dejar en claro que existen otras definiciones de trabajo del término, si realmente desea evitar confundir el OP.
George Marian

4
Como desarrollador web que no pertenece a Microsoft desde hace mucho tiempo, nunca escuché el término 'PostBack' fuera del contexto de .net. Publicar datos y el término PostBack son cosas muy diferentes. Esta es una respuesta perfecta.
tommybananas

28

Consulte Descripción general del ciclo de vida de la página ASP.NET en MSDN para obtener una buena introducción general sobre lo que sucede cuando una solicitud llega al servidor.

Un PostBack es cualquier solicitud de una página que no es la primera solicitud. Un PostBack siempre será en respuesta a una acción del usuario (desencadenada más comúnmente por un botón, control AutoPostBack o Ajax).


1
Aunque este es un tema antiguo, quería señalar que su respuesta es parcialmente incorrecta (para que otros no sean engañosos). Puede apuntar la acción del formulario a cualquier URL que desee, ya que podría ser la primera solicitud. Lo importante es que es un POST.
Michael Goss

13

Una publicación es un viaje de ida y vuelta desde el cliente (navegador) al servidor y luego de regreso al cliente.

Esto le permite a su página pasar por el motor asp en el servidor y actualizar cualquier contenido dinámico.

aquí hay una buena explicación


10

ASP.Net utiliza un nuevo concepto (bueno, nuevo en comparación con asp ... ahora es anticuado) de ViewState para mantener el estado de sus controles asp.net. ¿Qué significa esto? En pocas palabras, si escribe algo en un cuadro de texto o selecciona un menú desplegable de una lista desplegable, recordará los valores cuando haga clic en un botón. El asp antiguo le obligaría a escribir código para recordar estos valores.

Esto es útil cuando un usuario encuentra un error. En lugar de que el programador tenga que ocuparse de recordar volver a rellenar cada control web, el estado de visualización de asp.net lo hace automáticamente. También es útil porque ahora el código subyacente puede acceder a los valores de estos controles en su formulario web asp.net con intellisense.

En cuanto a la publicación en la misma página, sí, un botón de "enviar" se publicará en un controlador de eventos en el código detrás de la página. Depende del controlador de eventos en el código subyacente redirigir a una página diferente si es necesario (o enviar un mensaje de error a su página o cualquier otra cosa que pueda necesitar hacer).


8

La definición de Wikipedia de devolución de datos es bastante buena, pero agregaría lo siguiente: Una devolución de datos es un HTTP POST posterior a la misma página en la que se encuentra el formulario.

Si tengo una página con un formulario y, en lugar de que mi botón Enviar redirija el navegador a otra página que procesará el formulario, haga que el botón Enviar actualice la página actual (y realice algunos pasos específicos para validar / guardar la página, presumiblemente), entonces se dice que el botón Enviar se ha publicado en la página actual.

Las devoluciones pueden ser completas (actualizar toda la página) o parciales (en el caso de que se emplee AJAX). Una devolución de datos de página parcial volverá a representar solo una parte de la página (como una lista desplegable, una tabla, etc.).


4

En el HTML antiguo, la única forma de actualizar algo en la página web es reenviar una nueva página web al navegador del cliente. Eso es lo que ASP solía hacer, tienes que hacer esto llamado "PostBack" para enviar una página actualizada al cliente.

En ASP .NET, no es necesario que vuelva a enviar toda la página web. Ahora puede usar AJAX u otros controles ASP.NET de modo que no tenga que volver a enviar toda la página web.

Si visita algún sitio web antiguo, notará que una vez que haga clic en algo, toda la página debe actualizarse, este es el ASP antiguo. En la mayoría de los sitios web modernos, notará que su navegador no tiene que actualizar toda la página, solo actualiza la parte del contenido que necesita actualizarse. Por ejemplo, en Stackoverflow, ves que la página actualiza solo el contenido, no toda la página web.


Eso es algo cierto, pero quizás un poco engañoso. Las devoluciones de datos estándar de asp.net SÍ envían la página completa, más el estado de visualización, al servidor y actualizan toda la página. AJAX hizo que esto fuera un poco más agradable con la capacidad de publicar solo partes de la página.
Scottie

3

Simplemente ponga esto con un pequeño código. Espero que te sea de ayuda. Cuando solicita por primera vez la URL de la página. puede ver su código fuente en la mayoría de los navegadores. A continuación se muestra una muestra.

Lo esencial de Post Back es en realidad llamar al __doPostBackque envía todos los datos del formulario obtenidos de su primera solicitud al servidor. ( __EVENTTARGETcontiene la identificación del control).

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

2

La devolución es una solicitud durante la cual ASP restaura los valores de las propiedades de los controles desde el estado de vista.


1

IsPostBackes una propiedad de la Asp.Netpágina que indica si la página está o noon its initial load y si un usuario ha realizado un botón en su página web que ha provocado que la página se vuelva a publicar en sí misma.

más sobre ... Asp.Net ispostback ()

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.