Pregunta ¿Qué es una devolución de datos?


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

una devolución de datos es un HTTP POST a la misma página donde está el formulario.

Si bien el artículo explica cómo se necesitaba una segunda página en ASP, pero ya no es necesaria en ASP.NET, no proporciona muchos detalles o antecedentes. Estoy buscando un montón de información sobre PostBacks. Al igual que la simple pregunta de "¿cómo puedo limpiar una casa?" Libro de 900 páginas. No necesito 900 páginas, pero los detalles por favor. Encontré un pequeño y agradable tutorial para el ciclo de vida de ASP.NET, pero realmente pasa por alto las devoluciones (entre otras cosas).

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


75
2017-11-22 23:10


origen


Respuestas:


Hasta ahora he visto la respuesta correcta aludida repetidamente, y casi todos han sido tímidos respecto de lo que considero subjetivamente como la marca.

Empecemos con lo básico:

Una solicitud HTTP puede ser cualquiera de Verbos HTTP, pero las dos personas que más usan son GET y POST. Bueno, esos son los dos que usa un programador con mayor 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 mediante el uso de la URL (para solicitar una página) o dentro del cuerpo de la solicitud (POST, PUT, DELETE, por ejemplo).

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

Entonces cuando envíes el cuerpo del POST (omitiendo los otros por ahora, puedes averiguarlo desde aquí) con los elementos del formulario, estás enviando ciertos elementos. Cómo se definen esos elementos depende de usted y del entorno en el que está trabajando. Usted podría publicar en un servidor con un elemento JSON en el cuerpo, o con XML, o con campos de formulario. En general, hacemos publicaciones de un elemento FORM en el cuerpo del HTML.

Ahora todos dicen, "oh, una devolución de datos es una solicitud posterior a una página". Pero, eso no es verdad. Una devolución de datos es cuando envía datos a través de POST -> volver 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). Tú podría devolución de datos a la página la primera vez que se visita la página, y de hecho ASP.NET tiene herramientas para hacerlo en la biblioteca. Ciertamente podría tener una información POST de cliente de escritorio en un servidor (piense en Twitter) sin mostrar ninguna página web desde el servidor (de acuerdo, así que Twitter probablemente no sea el mejor concepto para usar como ejemplo aquí, pero quiero ilustrar que puede usar un cliente que no muestra la página web, por lo que no es necesario realizar una solicitud).

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

Así que aquí hay algo más a considerar:

¿Qué pasa si le das al usuario una página con un montón de <input>s y no <form> pero, en cambio, tenía un botón conectado en javascript para concaturar todos aquellos <input>s con &value-n= y enviarlos como un GET? Hace lo mismo, pero viola el concepto de solo usar GET para las solicitudes. (posiblemente)  La discusión subsiguiente me anima a reforzar que GET no debería tener efectos secundarios (sin valores de actualización)

Así es como se puede enviar a alguien un enlace a una búsqueda en Google, por ejemplo. Por lo tanto, SIEMPRE no tenemos que ENVIAR DE NUEVO al servidor para obtener datos.

Espero que esto ayude. Aclamaciones


56
2017-11-22 23:37



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 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, pegajosidad de la granja web, servidores de estado, advertencias del navegador (sin usar el patrón PRG) , ...)

Ver ASP.NET MVC en lugar.


26
2017-11-22 23:21



Ver Resumen del ciclo de vida de la página ASP.NET en MSDN para 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).


25
2017-11-22 23:20



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

Esto permite que su página pase por el motor asp del servidor y cualquier contenido dinámico que se actualice.

aquí hay una buena explicación


11
2017-11-22 23:16



ASP.Net utiliza un nuevo concepto (bueno, nuevo comparado 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 viejo asp te 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 lidiar con recordar volver a llenar cada control web, asp.net viewstate hace esto 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 publicar en la misma página, sí, un botón "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 tenga que hacer).


9
2017-11-22 23:16



La definición de Wikipedia de devolución de datos es bastante buena, pero agregaría lo siguiente: Una devolución de datos es una  subsecuente  POST HTTP a la misma página donde está el formulario.

Si tengo una página con un formulario y, en lugar de hacer que mi botón Enviar redirija el navegador a otra página que procesará el formulario, en su lugar haga que el botón Enviar actualice la página actual (y realice algunos pasos específicos para validar / guardar el página, presumiblemente), se dice que ese botón Enviar tiene publicado de vuelta a 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 página parcial volverá a representar solo una parte de la página (como una sola lista desplegable, una tabla, etc.).


6
2017-11-22 23:21



En el antiguo HTML, 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 tiene que volver a enviar toda la página web. Ahora puede usar AJAX u otros controles ASP.NET para que no tenga que volver a enviar toda la página web.

Si visita un sitio web anterior, notará que una vez que hace clic en algo, toda la página debe actualizarse, esta es la ASP anterior. En la mayoría del sitio web moderno, 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, verá que la página solo actualiza el contenido, no toda la página web.


4
2017-11-22 23:16



Simplemente ponga esto por un pequeño código. Espero que sea útil para ti. Cuando solicita por primera vez la url de la página. puede ver el código fuente de este en la mayoría de los navegadores. Debajo hay una muestra de esto.

Lo esencial de Post Back es en realidad llamar al __doPostBack que envía todos los datos del formulario obtenidos de su primera solicitud al servidor. (__EVENTTARGET contiene 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>

3
2018-03-07 10:03



IsPostBack es una propiedad de Asp.Net página que dice si la página es o no on its initial load y si un usuario ha realizado un botón en su página web que ha causado que la página se publique nuevamente.

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


1
2017-12-30 06:26



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


1
2018-03-27 09:16