Domanda

È possibile attivare a livello di codice un postback dal codice server in ASP.NET?So che è possibile eseguire Response.Redirect o Server.Transfer per reindirizzare a una pagina, ma esiste un modo per attivare un postback sulla stessa pagina nel codice server (cioè. senza usare trucchi Javascript per inviare un modulo)?

È stato utile?

Soluzione

I postback Asp.net vengono avviati dal client (in genere l'invio di moduli).Non sono sicuro di cosa stai cercando di ottenere.Alcuni lato server ciclo di vita della pagina gli eventi sono già eseguiti e ciò che stai tentando di fare è generare nuovamente i gestori di eventi precedenti.

Altri suggerimenti

I postback sono causati dall'invio di un FORM.È necessario avviarli dal client.

Potresti farlo con una richiesta Ajax.Dovresti fare in modo che la pagina esegua il polling del server.Non esiste alcun modo per il server di inviare informazioni al browser senza richiederle.Ma avere qualche Javascript che viene eseguito in background e interroga il server ogni 5 secondi (o più, a seconda delle tue esigenze) sarebbe probabilmente la soluzione migliore.

AGGIUNGERE

Se si segue questa strada, è possibile fare in modo che il server invii solo un sì o un no, o anche solo 0 o 1 a seconda che il postback debba essere eseguito o meno.A seconda delle esigenze, non vi è alcun motivo per utilizzare effettivamente la parte XML di AJAX.Basta eseguire una semplice richiesta asincrona, possibilmente con alcune variabili querystring, e ottenere una semplice parola o anche un numero come risposta.In questo modo puoi mantenere il javascript per creare e analizzare l'XML se non è necessario.

Se stai cercando di avviare la comunicazione dal server, anziché il polling, dai un'occhiata a Microsoft Segnale R.Il contesto più semplice per questo, e quello che SignalR ha come parte del codice di esempio, è un'applicazione di chat.Potrai avviare messaggi dal codice dietro e riceverli come eventi javascript sulla tua pagina.

Codice server da inviare:

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);
        }
    }
}

Il codice client per catturare i messaggi del server è l'override di '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>

Per coloro che utilizzano versioni più recenti di .NET, è necessario utilizzare Page.ClientScript.GetPostBackEventReference Da 'this.GetPostBackEventReference(...)' è obsoleto.Anche probabilmente Page.ClientScript.RegisterStartupScript(...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top