ASP.NET - est-il possible de déclencher un postback à partir du code du serveur?
est-il possible de déclencher programmatiquement un postback à partir du code du serveur ASP.NET je ne sais pas. Je sais qu'il est possible de répondre.Redirection ou serveur.Transfert pour rediriger vers une page, mais est-il un moyen de déclencher une publication sur la même page dans le code serveur ( i.e. sans utiliser la ruse javascript pour soumettre un formulaire)?
5 réponses
Asp.net les envois postaux sont effectués à partir du client (en général, présentation du formulaire). Je ne suis pas sûr de ce que vous essayez d'atteindre. Certains du côté serveur page lifecyle 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.
les envois postaux sont causés par la présentation d'un formulaire. Vous devez les initier à partir du client.
vous pouvez le faire avec une demande Ajax. Il faudrait que la page interroge le serveur. Il n'y a aucun moyen pour le serveur de pousser des informations vers le navigateur sans le demander. Mais avoir du Javascript qui tourne en arrière-plan et interroge le serveur toutes les 5 secondes (ou plus, selon vos besoins) serait probablement la meilleure solution.
APPEND
si vous suivez cette route, vous pouvez demander au serveur de renvoyer juste un oui ou un non, ou même juste 0 ou 1 selon que le postback doit être effectué ou non. Selon vos besoins, il n'y a aucune raison d'utiliser réellement la partie XML D'AJAX. Il suffit d'exécuter une simple requête asynchrone, éventuellement avec quelques variables de type querystring, et de récupérer un simple mot, ou même un nombre comme réponse. De cette façon, vous pouvez garder le javascript pour créer et analyser le XML si ce n'est pas nécessaire.
si vous cherchez à initier une communication à partir du serveur, plutôt que de procéder à un sondage, regardez SignalR. Le contexte le plus simple pour cela, et celui que le SignalR a dans son exemple de code est une application de chat. Vous serez en mesure d'initier des messages à partir de code derrière et les recevoir comme des événements javascript sur votre page.
Code Du 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 saisir les messages du serveur est l'annulation de 'le 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>: ' + 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 les nouvelles versions de .NET, vous devez utiliser Page.ClientScript.GetPostBackEventReference
depuis 'this.GetPostBackEventReference(...)'
est obsolète. Probablement aussi Page.ClientScript.RegisterStartupScript(...