2016-08-19 15 views
0

私はAJAX呼び出しボタンをクリックする介して行われているいるWebフォームアプリケーションを持っていますAjax呼び出しのApp

[WebMethod] 
public static void TestMethod() 
{ 
    Debug.Print("Hello"); 
} 

私はボタンをクリックすると、私はそれがメソッドを打っていない、「SUCCESS」を言う警告を取得しかし:ファイルForum.aspx.cs私はあなたが上記のものまですべてを取り除きました。そして、私はVS出力ウィンドウで "Hello"を見ていません。また、私が設定したブレークポイントにも当てはまりません。私を行う私のPage_Loadの方法は、Debug.Print("LOAD")と言う行があり、ボタンをクリックすると、出力ウィンドウで "LOAD"を取得します。だから、Page_Loadメソッドに当たっていますが、TestMethodでは実際に呼び出す必要はありません。

誰もが間違っているかもしれない何かを考えることができますか?

+0

:、IRequiresSessionStateインタフェースを継承することを確認してください? – Calum

+0

@カルマ - いいえ。私の成功関数で「警告(応答);」と言うと、私は実際のページのHTMLを取得します。私の前提は、TestMethodではなく、「Page_Load」の「応答」を私に与えるからです。 – Hill

答えて

0

Figgured it out!私のアプリは.Net 2.0で動いていた。 4.0で動作するようにプロジェクトを再構成しました。地獄...

0

を反転すると、あなたが明示的にHTTP GETを使用するようにWebメソッドを伝える必要があり[WebMethod, System.Web.Script.Services.ScriptMethod(UseHttpGet = true)]

[WebMethod]

を交換してください。

別のオプションがある場合は、$.ajaxコールでtype:'GET'type:'POST'に変更するだけで問題ありません。

0

あなたが質問したことは必ずしも必要ではありませんが、通常のWebフォームページにあるサーバー側のメソッドにJSON呼び出しを行う場合は、「遅い道」をとっています。

私はHttpHandlerを提案します。あなたの標準的なWebフォームとは異なります。ページのライフサイクルがないため(速くてすばらしい)、コードの分離や再利用性が大幅に向上します。

"Generic Handler"プロジェクトに新しいアイテムを追加してください。これにより、新しい.ashxファイルが作成されます。 IHttpHandlerを実装するクラスの主なメソッドはProcessRequestです。あなたのAJAX呼び出しで

public void ProcessRequest (HttpContext context) { 

    Debug.Print("Hello"); 
    return; 

    //the following code should be used to return json to the ajax method 
    context.Response.ContentType = "text/json"; 
    context.Response.Write(json); 
} 

変更にURLを、それはそれを行う必要があります。だからあなたの元の質問からコードを使用します。

$.ajax({ 
    type: 'GET', //change this to POST if you want to pass a json object to the server side method (works in unison with the `dataType` property) 
    contentType: "application/json; charset=utf-8", 
    url: 'Handlers/RunTestMethod.ashx', 
    async: true, //notice I set async to true so your page does not "freeze" while the ajax call is being made 
    dataType: "json", //if needed, this property allows you to receive json back from the server side method (works in unison with the `type` property) 
    success: function (response) { 
    alert("SUCCESS"); 
    } 
}); 

考慮すべきもう一つの小さな点、あなたはハンドラのコード自体内からSessionオブジェクトにアクセスする必要がある場合:RunTestMethod.ashxが作成したばかりのIHTTPハンドラの名前ですJavaScriptは、このようになります。あなたが成功関数に渡された応答に文字列が含まれないのtestMethodから文字列を返す場合

public class GetFileHandler : IHttpHandler, IRequiresSessionState