ASP.NET - 서버 코드에서 포스트백을 트리거할 수 있습니까?

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

  •  09-06-2019
  •  | 
  •  

문제

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>:&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