ASP.NET - Est-il possible de déclencher une publication à partir du code du serveur ?

StackOverflow https://stackoverflow.com/questions/60650

  •  09-06-2019
  •  | 
  •  

Question

Est-il possible de déclencher par programme une publication à partir du code du serveur dans ASP.NET ?Je sais qu'il est possible de faire un Response.Redirect ou Server.Transfer pour rediriger vers une page, mais existe-t-il un moyen de déclencher une publication sur la même page dans le code du serveur (c'est à dire. sans utiliser la supercherie javascript pour soumettre un formulaire) ?

Était-ce utile?

La solution

Les publications Asp.net sont initiées par le client (généralement la soumission d'un formulaire).Je ne suis pas sûr de ce que vous essayez de réaliser.Une partie du côté serveur cycle de vie des pages les événements sont déjà exécutés et ce que vous essayez de faire est de relancer les gestionnaires d'événements précédents.

Autres conseils

Les publications sont provoquées par une soumission de FORMULAIRE.Vous devez les lancer depuis le client.

Vous pouvez le faire avec une requête Ajax.Il faudrait que la page interroge le serveur.Il n'existe aucun moyen pour le serveur de transmettre des informations au navigateur sans le demander.Mais avoir du Javascript qui s'exécute en arrière-plan et interroge le serveur toutes les 5 secondes (ou plus, selon vos besoins) serait probablement la meilleure solution.

AJOUTER

Si vous suivez cette voie, vous pouvez demander au serveur de renvoyer juste un oui ou un non, ou même juste 0 ou 1 selon que la publication doit être effectuée ou non.En fonction de vos besoins, il n'y a aucune raison d'utiliser réellement la partie XML d'AJAX.Exécutez simplement une simple requête asynchrone, éventuellement avec quelques variables de chaîne de requête, et récupérez un simple mot, ou même un nombre en réponse.De cette façon, vous pouvez conserver le javascript pour créer et analyser le XML s'il n'est pas nécessaire.

Si vous cherchez à initier une communication depuis le serveur, plutôt qu'à effectuer une interrogation, jetez un œil aux SignalR.Le contexte le plus simple pour cela, et celui que SignalR a dans son exemple de code est une application de chat.Vous pourrez lancer des messages à partir du code derrière et les recevoir sous forme d'événements javascript sur votre page.

Code serveur à envoyer :

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

Le code client pour intercepter les messages du serveur est le remplacement 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>

Pour ceux qui utilisent des versions plus récentes de .NET, vous devez utiliser Page.ClientScript.GetPostBackEventReference depuis 'this.GetPostBackEventReference(...)' est obsolète.Et probablement aussi Page.ClientScript.RegisterStartupScript(...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top