ASP.NET - サーバー コードからポストバックをトリガーすることは可能ですか?
質問
ASP.NET のサーバー コードからプログラムでポストバックをトリガーすることは可能ですか?Response.Redirect または Server.Transfer を実行してページにリダイレクトできることはわかっていますが、サーバー コードで同じページへのポストバックをトリガーする方法はありますか (つまり JavaScript のトリックを使用せずにフォームを送信しますか?
解決
Asp.net ポストバックはクライアントから開始されます (通常はフォーム送信)。あなたが何を達成しようとしているのかわかりません。サーバー側の一部 ページのライフサイクル イベントはすでに実行されており、あなたが行おうとしているのは、以前のイベント ハンドラーを再度呼び出すことです。
他のヒント
ポストバックは、FORM の送信によって発生します。クライアントから開始する必要があります。
Ajax リクエストを使用してそれを行うことができます。ページがサーバーをポーリングする必要があります。サーバーがリクエストせずに情報をブラウザーにプッシュする方法はありません。ただし、バックグラウンドで実行され、5 秒ごと (または必要に応じてそれ以上) ごとにサーバーをポーリングする Javascript を用意するのが、おそらく最良の解決策でしょう。
追加
この方法を使用する場合、ポストバックを実行するかどうかに応じて、サーバーに「はい」または「いいえ」だけ、または 0 または 1 だけを返信させることができます。ニーズによっては、AJAX の XML 部分を実際に使用する理由がない場合も多くあります。おそらくいくつかのクエリ文字列変数を使用して単純な非同期リクエストを実行し、応答として単純な 1 つの単語、さらには数値を返します。こうすることで、不要な場合に XML の作成と解析に使用する JavaScript を残しておくことができます。
ポーリングではなくサーバーから通信を開始したい場合は、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>: ' + 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(...