次の構文を使用してjqueryでページメソッドを呼び出すことができることを知っています
$.ajax({
type: "POST",
url: "Default.aspx/GetDate",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Replace the div's content with the page method's return.
$("#Result").text(msg.d);
}
});
これはaspxページで機能しますが、ascxページで可能ですか? (Webコントロール)
30分ほど試してみましたが、うまく動かないので、それも可能かと思います。
注:明確にするために、ascxページを呼び出そうとするとI am jqueryのURLを更新します:)
いいえ、ascxコントロールは、クライアントマシンからアクセスできる実際のURLを表していないためです。それらは純粋にサーバー側であり、他のページに埋め込むことを目的としています。
あなたがしたいと思うかもしれないことはあなたがあなたのascxファイルに現在持っているのと同じhtmlのスニペットを提供するaspxページを持っていることです。 aspxページは、必ずしも完全なhtmlドキュメント(<html> <body>など)を提供する必要はありません。関心のあるユーザーコントロールをレンダリングするだけです。
この手法は、テーブルの内容にコールバックURLを必要とするingridプラグインで常に使用しています。
Ascxファイルを直接リクエストすることでは不可能だと思います。 $ .ajax(..)へのurlパラメーターとして「MyControl.ascx」を提供します。 ascxファイルはWebサーバーによって直接公開されません。
ユーザーコントロールを含むaspxページのURLを指定できると思います。 MyControl.ascxのインスタンスがMyPage.aspxにある場合は、urlパラメーターとして「MyPage.aspx」を指定する必要があります。それはあなたが達成しようとしていることの目的を損なうかもしれないように思えます。
編集:クライドが以下に言ったことは良い考えのようです。私は、クライアント側のスクリプトからアクセスするためにホストするだけの仕事をしているページにascxコントロールを含めることで、自分と同じようなことをしています。
これは、ASPXページで使用できるのはPageメソッド(ScriptMethod)のみであるという制限を回避する方法です。この例では、ページ基本クラスと特別な属性を使用してプロキシを構築し、ASCXページのコードビハインドのメソッドを装飾し、クライアントからアクセスできるようにします。
AJAX、JSON、基本クラス、リフレクションを使用して、ASCXユーザーコントロール内にPageメソッド(ScriptMethod)を作成する
ユーザーコントロールは外部(ページの外部)からアクセスできるように意図されていないため、それが可能になるとは思いません。スクリプトサービス(Webサービス)を使用することをお勧めします。
コントロールからの情報を使用して必要な処理を実行するメソッドを.aspxページに作成するのはどうですか?コントロールに含まれるべきか含まれないかについて、人々が前後に行き来することは知っていますが、コントロールにプロパティとオブジェクトのみが含まれている場合は、.aspxページに関数を含めるとうまくいくと思います。明らかに、多くのトレードオフがあります。
コントロールをロードし、レンダリングされたHTMLを応答に書き込むジェネリックハンドラー(.ashx)を作成します。
Default.aspxまたは他のaspxファイルにメソッドGetDate()を記述できますそして、.ASCXファイルからそのメソッドを呼び出すことができます。
例:
UserControl.ascxの場合:
_$.ajax({
type: "POST",
url: "Default.aspx/GetDate",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Replace the div's content with the page method's return.
$("#Result").text(msg.d);
}
_
});
Default.aspx.csの場合:
Public void GetDate() //Public static void { //your code here }