web-dev-qa-db-ja.com

jQueryでASP.NET PageMethod / WebMethodを呼び出す-ページ全体を返します

jQuery 1.3.2、ASP.NET 2.0。 AJAX PageMethod(WebMethod)の呼び出しを行うと、応答だけでなくページ全体/ページ全体が返されます。ページメソッドのブレークポイントは、ヒットしないことを示しています。[WebMethod]属性があります。私のメソッドでは、それはispublic staticであり、文字列を返し、パラメータを受け入れません。クラスの先頭に[ScriptService]を追加してみましたそれは助けたが、そうしなかった場合。

私はこの投稿を見ました Jquery AJAX ASP.NET WebMethod Returning Entire Page これは同じ症状を持っていましたが、まだ問題があります。 http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/ を読むと、私はこれをTに追いかけていますが、それでも運はありません。

私が行っているjQuery呼び出しは次のとおりです。

jQuery.ajax({
    type: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: '{}',
    dataType: 'json',
    url: 'MyPage.aspx/SomePageMethod',
    success: function(result){
        alert(result);
    }
});

FF3のFirebugによるリクエスト/レスポンスヘッダーは次のとおりです。

Response Headers
Server  ASP.NET Development Server/8.0.0.0
Date    Tue, 24 Feb 2009 18:58:27 GMT
X-AspNet-Version    2.0.50727
Cache-Control   private
Content-Type    text/html; charset=utf-8
Content-Length  108558
Connection  Close

Request Headers 
Host    localhost:2624
User-Agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6
Accept  application/json, text/javascript, */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  300
Connection  keep-alive
Content-Type    application/json; charset=utf-8
X-Requested-With XMLHttpRequest
Referer http://localhost:2624/MyApp/MyPage.aspx
Content-Length  2
Cookie  ASP.NET_SessionId=g1idhx55b5awyi55fvorj055; 

キックのためだけにScriptManagerをページに追加して、それが役立ったかどうかを確認しましたが、運はありません。

助言がありますか?

35
Matt

ページメソッドが適切に機能していることを知っていますか? ScriptManagerを使用する場合、機能しますか?

web.configエントリ が欠落しているようです。特にHttpModulesセクション。

27
Dave Ward

Web.configから1行が欠落していました。

<system.web>
  <httpModules>
    <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
  </httpModules>
</system.web>
23
adam seabridge

別の理由で今日、この問題に再び遭遇しました。「アプリケーション」のスペルを間違えていました

contentType: 'application/json'

そして、WebMethodへの呼び出しの代わりに全ページの応答を取得していました。

13
Matt

これらすべてを試しても、ページメソッドからページ全体が返される場合は、わかりやすいURLを使用していないことを確認してください。あなたがそれらを使用している場合、このトリックはあなたを助けるかもしれません

呼び出しを行う前に、jsスクリプトに次の行を追加します。

PageMethods.set_path(PageMethods.get_path() + '.aspx');
6
Marvin Zumbado

サイドノートとしてこれをここに捨てます。 HTML文字列内の文字列変数の長さと、ajaxを呼び出すために使用したWebサイトがこのように見えたため、このエラーが発生していました。

loc = (loc.substr(loc.length - 1, 1) == "/") ? loc + "Default.aspx" : loc;
        $.ajax({
            type: "POST",
            url: loc + "/" + methodName,
            data: "{" + args + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: onSuccess,
            error: onFail
        });

.aspxリンクを正しく抽出できなかったため、loc varを使用する代わりにWebページをハードコーディングしました。

1
Dan Simon

RouteConfig.csの次の行をコメントするとうまくいきます

 settings.AutoRedirectMode = RedirectMode.Permanent;
0
Hassan Nazeer

私が実際に見たほとんどのajaxシナリオは、ページではなくWebサービスまたは別個のスクリプトハンドラを呼び出す必要があります。 .net 3-5では非常に簡単ですが、2-0ではそれほど簡単ではありません。ページ全体をロードしない方法を(もし)理解した後でも、ページメソッドを呼び出さない理由は次のとおりです。

1)ページメソッドは、フルページロードよりも少ないものをロードするかもしれませんが、それでも単純なajaxコールに必要なものよりもはるかに多くロードします。 2)責任の大まかな分離。このページはおそらく、ajaxメソッドで使用しているロジックではなく、適切にレイアウトするためのものです。
3)セッション状態が必要な場合もありますが、それでも引き続き使用できます。

現在、このテーマに関する知識を更新しています...このスレッドでこの質問に対する適切な回答を探すか、来週に投稿します。これが私が向かう方向です

1)サーバーからクライアントにJSONを送信し、javascriptを使用してページを更新します。 -さまざまなフレームワークにより、WebサーバーからJSONを簡単に作成できます。
2)JQueryは、苦労するのではなく、ajax呼び出し、json処理、およびクライアントのフォーマットを楽しくします。

@Marvin Zumbadoのコメントは私のURLに.aspxがありませんでした。これはプログラマーとしての私の最高の瞬間ではないことを知っています!

0