Frage

Ist es möglich, einen Postback von Server-Code in ASP.NET programmatisch auslösen, um zu? Ich weiß, dass es möglich ist, ein Response.Redirect oder Server.Transfer zu tun, um eine Seite umzuleiten, aber gibt es eine Möglichkeit, eine Postbacks auf die gleiche Seite in Servercode auslösen ( dh ohne mit Javascript Betrügerei ein Formular einreichen)?

War es hilfreich?

Lösung

Asp.net Postbacks von dem Client initiiert werden (in der Regel bildet Vorlage). Ich bin nicht sicher, was Sie erreichen wollen. Einige der Server-Seite Seite lifecyle Ereignisse bereits ausgeführt sind und was Sie versuchen zu tun, erhöht die vorherigen Ereignishandler wieder.

Andere Tipps

Postbacks sind durch eine Formularübermittlung verursacht. Sie müssen sie von dem Client initiieren.

Man könnte es mit einem Ajax-Request tun. Sie würden die Seite Abfrage den Server haben müssen. Es gibt keine Möglichkeit für den Server ohne diese anfordern Informationen an den Browser zu schieben. Aber mit etwas Javascript, die im Hintergrund läuft und fragt den Server alle 5 Sekunden (oder mehr, je nach Bedarf) wäre wahrscheinlich die beste Lösung sein.

APPEND

Wenn Sie diesen Weg gehen, können Sie den Server zurückschicken nur ja oder nein, oder auch nur 0 oder 1, je nachdem, ob oder nicht, sollten die Postbacks durchgeführt werden. Je nach Bedarf, werden es viele kein Grund, um tatsächlich den XML Teil von AJAX zu verwenden. Führen Sie einfach eine einfache asynchrone Anfrage, möglicherweise mit einigen Abfragezeichenfolgeflag Variablen und erhält ein einfaches ein Wort zurück, oder sogar eine Zahl als Antwort. So können Sie die JavaScript zum Erstellen und Analysieren der XML-out halten kann, wenn er nicht benötigt wird.

Wenn Sie suchen, die Kommunikation von dem Server zu initiieren, anstatt Polling, hat einen Blick auf Microsofts SignalR . Der einfachste Kontext für diesen, und man die SignalR hat als Teil seines Beispielcode eine Chat-Anwendung ist. Sie können die Nachrichten von Code hinter initiieren und sich als JavaScript-Ereignisse auf Ihrer Seite erhalten.

Server-Code zu senden:

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

Client-Code-Server-Nachrichten zu fangen ist die Überschreibung von '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>

Für die Verwendung von neueren Versionen von .NET, Sie haben Page.ClientScript.GetPostBackEventReference zu verwenden, da 'this.GetPostBackEventReference(...)' veraltet ist. Auch wahrscheinlich Page.ClientScript.RegisterStartupScript(...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top