ジェネリックハンドラー(.ashx)やWCFサービス(.svc)を試してみましたが、PageMethodが1番楽だと思います。
EnablePageMethods属性
ScriptManagerを配置し、EnablePageMethods属性をtrueにします。
<asp:ScriptManager ID="sm1" runat="server" EnablePageMethods="true"> </asp:ScriptManager>
※ ここをtrueにしていないと実行時に下記のエラーが発生します。
Uncaught ReferenceError: PageMethods is not defined
WebMethodを作成
コードビハインド(.aspx.csファイル)にWebMethod属性を付与したstaticなメソッドを作成します。
[System.Web.Services.WebMethod] public static string getName(int id) { if (id == 42) { return "太郎"; } throw new Exception("エラーです。"); }
JavaScriptから呼び出す
PageMethodsを使用してWebMethodを呼び出します。
引数は次の通りです。
- 42
WebMethodの引数です。複数ある場合はカンマ区切りで羅列します。 - onSuccess
成功時に処理される関数です。 - onError
失敗時に処理される関数です。
今回の例では「42」以外の引数を渡すと、WebMethod側が例外を投げるのでこの関数が処理されるようになります。
<script type="text/javascript"> PageMethods.getName( 42, onSuccess, onError ); function onSuccess(result, userContext, methodName) { alert(result); } function onError(result, currentContext, methodName) { alert('error:' + result.get_message()); } </script>
コメント