tipos net ispostback asp asp.net postback

asp.net - net - postback javascript



ASP.NET: ¿es posible activar una devolución de datos desde el código del servidor? (5)

¿Es posible activar programáticamente una devolución de datos desde el código del servidor en ASP.NET? Sé que es posible hacer un Response.Redirect o Server.Transfer para redirigir a una página, pero ¿hay alguna manera de desencadenar una devolución de datos a la misma página en el código del servidor ( es decir, sin utilizar el truco de JavaScript para enviar un formulario)?


Podrías hacerlo con una solicitud de Ajax. Tendría que tener la página sondeando el servidor. No hay forma de que el servidor envíe la información al navegador sin solicitarla. Pero tener un Javascript que se ejecute en segundo plano y sondee el servidor cada 5 segundos (o más, según sus necesidades) probablemente sea la mejor solución.

ADJUNTAR

Si realiza esta ruta, puede hacer que el servidor devuelva solo un sí o un no, o incluso solo 0 o 1 dependiendo de si se debe realizar o no la devolución de datos. Dependiendo de sus necesidades, no hay muchas razones para usar la parte XML de AJAX. Simplemente ejecute una solicitud asincrónica simple, posiblemente con algunas variables de cadena de consulta, y obtenga una sola palabra simple, o incluso un número como respuesta. De esta forma, puede mantener el javascript para crear y analizar el XML si no es necesario.


Las confirmaciones de Asp.net se inician desde el cliente (por lo general, envío de formularios). No estoy seguro de lo que estás tratando de lograr. Algunos de los eventos lifecyle de la página del lado del servidor ya se han ejecutado y lo que intenta hacer es volver a generar los controladores de eventos anteriores.


Las devoluciones son causadas por un envío de formulario. Debe iniciarlos desde el cliente.


Si está buscando iniciar la comunicación desde el servidor, en lugar de sondear, eche un vistazo al SignalR de Microsoft. El contexto más fácil para esto, y uno que SignalR tiene como parte de su código de ejemplo es una aplicación de chat. Podrá iniciar mensajes desde el código subyacente y recibirlos como eventos de JavaScript en su página.

Código del servidor para enviar:

using System; using System.Web; using Microsoft.AspNet.SignalR; namespace SignalRChat { public class ChatHub : Hub { public void Send(string name, string message) { // Call the broadcastMessage method to update clients. Clients.All.broadcastMessage(name, message); } } }

Código de cliente para capturar mensajes del servidor es la anulación de ''chat.client.broadcastMessage'':

<script type="text/javascript"> $(function () { // Declare a proxy to reference the hub. var chat = $.connection.chatHub; // Create a function that the hub can call to broadcast messages. chat.client.broadcastMessage = function (name, message) { // Html encode display name and message. var encodedName = $(''<div />'').text(name).html(); var encodedMsg = $(''<div />'').text(message).html(); // Add the message to the page. $(''#discussion'').append(''<li><strong>'' + encodedName + ''</strong>:&nbsp;&nbsp;'' + encodedMsg + ''</li>''); }; // Get the user name and store it to prepend to messages. $(''#displayname'').val(prompt(''Enter your name:'', '''')); // Set initial focus to message input box. $(''#message'').focus(); // Start the connection. $.connection.hub.start().done(function () { $(''#sendmessage'').click(function () { // Call the Send method on the hub. chat.server.send($(''#displayname'').val(), $(''#message'').val()); // Clear text box and reset focus for next comment. $(''#message'').val('''').focus(); }); }); }); </script>


Para aquellos que usan versiones más nuevas de .NET, debes usar Page.ClientScript.GetPostBackEventReference ya que ''this.GetPostBackEventReference(...)'' está obsoleto. También probablemente Page.ClientScript.RegisterStartupScript(...