ASP.NET. Можно ли запустить обратную передачу из кода сервера?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Можно ли программно запустить обратную передачу из серверного кода в ASP.NET?Я знаю, что можно выполнить Response.Redirect или Server.Transfer для перенаправления на страницу, но есть ли способ вызвать обратную передачу на ту же страницу в коде сервера (то есть без использования трюков JavaScript для отправки формы)?

Это было полезно?

Решение

Обратная передача Asp.net инициируется клиентом (обычно отправка формы).Я не уверен, чего вы пытаетесь достичь.Немного серверной части жизненный цикл страницы события уже выполняются, и вы пытаетесь снова вызвать предыдущие обработчики событий.

Другие советы

Постбэки вызваны отправкой формы.Вам необходимо инициировать их с клиента.

Вы можете сделать это с помощью запроса Ajax.Вам нужно будет, чтобы страница опрашивала сервер.Сервер не может передать информацию браузеру без его запроса.Но лучшим решением, вероятно, будет наличие Javascript, который работает в фоновом режиме и опрашивает сервер каждые 5 секунд (или чаще, в зависимости от ваших потребностей).

ДОБАВИТЬ

Если вы пойдете по этому пути, вы можете заставить сервер возвращать только да или нет, или даже просто 0 или 1, в зависимости от того, должна ли выполняться обратная передача.В зависимости от ваших потребностей у многих нет причин использовать XML-часть AJAX.Просто запустите простой асинхронный запрос, возможно, с несколькими переменными строки запроса, и получите в качестве ответа простое одно слово или даже число.Таким образом, вы можете сохранить JavaScript для создания и анализа XML, если он не нужен.

Если вы хотите инициировать связь с сервером, а не опрашивать, взгляните на Microsoft. СигналR.Самый простой контекст для этого, который SignalR имеет в своем примере кода, — это приложение чата.Вы сможете инициировать сообщения из кода и получать их как события JavaScript на своей странице.

Код сервера для отправки:

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

Клиентский код для перехвата сообщений сервера является переопределением «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>

Тем, кто использует более новые версии .NET, необходимо использовать Page.ClientScript.GetPostBackEventReference с 'this.GetPostBackEventReference(...)' является устаревшим.Также вероятно Page.ClientScript.RegisterStartupScript(...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top