ASP.NET - 서버 코드에서 포스트백을 트리거할 수 있습니까?
문제
ASP.NET의 서버 코드에서 프로그래밍 방식으로 포스트백을 트리거할 수 있습니까?Response.Redirect 또는 Server.Transfer를 수행하여 페이지로 리디렉션할 수 있다는 것을 알고 있지만 서버 코드에서 동일한 페이지에 대한 포스트백을 트리거하는 방법이 있습니까(즉. 양식을 제출하기 위해 자바스크립트 속임수를 사용하지 않고)?
해결책
Asp.net 포스트백은 클라이언트에서 시작됩니다(일반적으로 양식 제출).나는 당신이 무엇을 달성하려고하는지 잘 모르겠습니다.서버측 일부 페이지 수명주기 이벤트가 이미 실행되었으며 수행하려는 작업은 이전 이벤트 핸들러를 다시 발생시키는 것입니다.
다른 팁
포스트백은 FORM 제출로 인해 발생합니다.클라이언트에서 시작해야 합니다.
Ajax 요청으로 이를 수행할 수 있습니다.서버를 폴링하는 페이지가 있어야 합니다.서버가 정보를 요청하지 않고 브라우저에 정보를 푸시할 수 있는 방법은 없습니다.그러나 백그라운드에서 실행되고 5초마다(또는 필요에 따라 그 이상) 서버를 폴링하는 일부 Javascript를 사용하는 것이 아마도 최선의 솔루션일 것입니다.
추가
이 경로를 사용하면 포스트백 수행 여부에 따라 서버가 예 또는 아니요만 다시 보내도록 하거나 심지어 0 또는 1만 보내도록 할 수 있습니다.필요에 따라 실제로 AJAX의 XML 부분을 사용할 이유가 없습니다.몇 가지 쿼리 문자열 변수를 사용하여 간단한 비동기 요청을 실행하고 응답으로 간단한 한 단어 또는 숫자를 반환하면 됩니다.이렇게 하면 필요하지 않은 경우 XML을 생성하고 구문 분석하기 위한 자바스크립트를 유지할 수 있습니다.
폴링 대신 서버에서 통신을 시작하려는 경우 Microsoft의 시그널R.이에 대한 가장 쉬운 컨텍스트이자 SignalR이 예제 코드의 일부로 포함하는 컨텍스트는 채팅 애플리케이션입니다.코드 숨김에서 메시지를 시작하고 페이지에서 자바스크립트 이벤트로 수신할 수 있습니다.
보낼 서버 코드:
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>: ' + 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(...