Pergunta

É possível acionar programaticamente um postback do código do servidor no ASP.NET?Eu sei que é possível fazer um Response.Redirect ou Server.Transfer para redirecionar para uma página, mas existe uma maneira de acionar um postback para a mesma página no código do servidor (ou seja sem usar truques de javascript para enviar um formulário)?

Foi útil?

Solução

Os postbacks do Asp.net são iniciados no cliente (normalmente envio de formulário).Não tenho certeza do que você está tentando alcançar.Parte do lado do servidor ciclo de vida da página os eventos já foram executados e o que você está tentando fazer é aumentar novamente os manipuladores de eventos anteriores.

Outras dicas

Postbacks são causados ​​por um envio de FORM.Você precisa iniciá-los a partir do cliente.

Você poderia fazer isso com uma solicitação Ajax.Você teria que fazer com que a página sondasse o servidor.Não há como o servidor enviar informações ao navegador sem solicitá-las.Mas ter algum Javascript rodando em segundo plano e pesquisando o servidor a cada 5 segundos (ou mais, dependendo de suas necessidades) provavelmente seria a melhor solução.

ACRESCENTAR

Se você seguir esse caminho, poderá fazer com que o servidor envie de volta apenas um sim ou não, ou mesmo apenas 0 ou 1, dependendo se o postback deve ou não ser executado.Dependendo de suas necessidades, não há razão para realmente usar a parte XML do AJAX.Basta executar uma solicitação assíncrona simples, possivelmente com algumas variáveis ​​de string de consulta, e receber de volta uma simples palavra ou até mesmo um número como resposta.Dessa forma, você pode manter o javascript para criar e analisar o XML, caso não seja necessário.

Se você deseja iniciar a comunicação a partir do servidor, em vez de fazer uma pesquisa, dê uma olhada no site da Microsoft SinalR.O contexto mais fácil para isso, e que o SignalR tem como parte de seu código de exemplo, é um aplicativo de bate-papo.Você poderá iniciar mensagens do code-behind e recebê-las como eventos javascript em sua página.

Código do 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);
        }
    }
}

O código do cliente para capturar mensagens do servidor é a substituição 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 aqueles que usam versões mais recentes do .NET, você deve usar Page.ClientScript.GetPostBackEventReference desde 'this.GetPostBackEventReference(...)' está obsoleto.Provavelmente também Page.ClientScript.RegisterStartupScript(...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top