2008-09-13 2 views
10

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

ответ

10

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

+0

Ссылка не действительна. Я пытаюсь взломать здесь: http://bumbasblog.blogspot.com/2010/04/how-to-keep-session-alive-in-your-site.html, я обновлю свой комментарий, если он сработает. Хотя, это значит, что сеанс остается живым и не связан с вопросом OP. Я пробую другой подход. – 2017-11-16 22:10:55

1

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

APPEND

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

+3

Вы даже прочитали его вопрос? – FlySwat 2008-09-13 16:31:04

2

Резервные копии вызваны представлением FORM. Вам нужно инициировать их от клиента.

1

Если вы хотите начать общение с сервером, а не опросить, посмотрите на SignalR Microsoft. Самый простой контекст для этого, и один, который 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> 
0

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

Смежные вопросы