2008-09-13 11 views
10

Có thể kích hoạt một chương trình postback từ mã máy chủ trong ASP.NET không? Tôi biết rằng có thể làm một Response.Redirect hoặc Server.Transfer để chuyển hướng đến một trang, nhưng có cách nào để kích hoạt một postback đến cùng một trang trong mã máy chủ (tức là mà không cần sử dụng thủ thuật javascript để gửi biểu mẫu)?ASP.NET - Có thể kích hoạt đăng lại từ mã máy chủ không?

Trả lời

10

Asp.net Postbacks được bắt đầu từ khách hàng (thường là gửi biểu mẫu). Tôi không chắc chắn những gì bạn đang cố gắng đạt được. Một số phía máy chủ page lifecyle sự kiện đã được thực hiện và những gì bạn đang cố gắng làm là nâng cao trình xử lý sự kiện trước đó một lần nữa.

+0

Liên kết bị hỏng. Tôi đang cố gắng hack ở đây: http://bumbasblog.blogspot.com/2010/04/how-to-keep-session-alive-in-your-site.html, tôi sẽ cập nhật nhận xét của mình nếu nó hoạt động. Mặc dù, điều này là để giữ cho phiên còn sống, và không liên quan đến câu hỏi của OP. Tôi đang thử một cách tiếp cận khác. –

1

Bạn có thể làm điều đó bằng một yêu cầu Ajax. Bạn sẽ phải có trang bỏ phiếu cho máy chủ. Không có cách nào để máy chủ đẩy thông tin ra ngoài trình duyệt mà không yêu cầu. Nhưng có một số Javascript chạy trong nền và thăm dò ý kiến ​​các máy chủ mỗi 5 giây (hoặc nhiều hơn, tùy thuộc vào nhu cầu của bạn) có lẽ sẽ là giải pháp tốt nhất.

APPEND

Nếu bạn đi tuyến đường này, bạn có thể có các máy chủ gửi lại chỉ là một có hoặc không, hoặc thậm chí chỉ 0 hoặc 1 tùy thuộc vào việc hay không postback nên được thực hiện. Tùy thuộc vào nhu cầu của bạn, có rất nhiều lý do để thực sự sử dụng phần XML của AJAX. Chỉ cần chạy một yêu cầu Không đồng bộ đơn giản, có thể với một vài biến chuỗi truy vấn và lấy lại một từ đơn giản hoặc thậm chí là một số làm phản hồi. Bằng cách đó bạn có thể giữ javascript để tạo và phân tích cú pháp XML ra nếu nó không cần thiết.

+3

Thậm chí bạn có đọc câu hỏi của mình không? – FlySwat

2

Đăng lại là do gửi FORM. Bạn cần phải khởi tạo chúng từ khách hàng.

1

Nếu bạn đang muốn bắt đầu truyền thông từ máy chủ, chứ không phải bỏ phiếu, hãy xem qua số SignalR của Microsoft. Ngữ cảnh dễ nhất cho điều này, và một trong những SignalR là một phần của mã ví dụ của nó là một ứng dụng trò chuyện. Bạn sẽ có thể bắt đầu các tin nhắn từ mã phía sau và nhận chúng dưới dạng các sự kiện javascript trên trang của bạn.

máy chủ mã để gửi:

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

Khách hàng Mã để nhận được các thư máy chủ là ghi đè '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

Đối với những người sử dụng phiên bản mới của .NET, bạn phải sử dụng Page.ClientScript.GetPostBackEventReference'this.GetPostBackEventReference(...)' đã lỗi thời. Cũng có thể là Page.ClientScript.RegisterStartupScript(...