2009-05-20 9 views
34

jQuery経由でクライアントサイドからサーバーサイドメソッドを呼び出そうとしています。次のように私のコードは次のとおりです。jQuery経由でASP.NETサーバー側メソッドを呼び出す

サーバー側:

using System.Web.Services; 
    [WebMethod()] 
    //[ScriptMethod()] 
    public static void SendMessage(string subject, string message, string messageId, string pupilId) 
    { 
     //Send message 
    } 

クライアント側:

$("#btnSendMessage").live("click", function(){ 
    var subject = $("#tbSubject").val(); 
    var message = $("#tbMessage").val(); 
    var messageId = $("#hdnMessageId").val(); 
    var pupilId = $("#hdnPupilId").val(); 

    $.ajax({ 
     type: "POST", 
     url: "./MessagePopup.aspx/SendMessage", 
     data: ("subject=" + subject + "&message=" + message + "&messageId=" + messageId + "&pupilId=" + pupilId), 
     error: function(XMLHttpRequest, textStatus, errorThrown){ 
      alert(textStatus); 
     }, 
     success: function(result){ 
     alert("success"); 
     } 
    }); 
    return false; 
}); 

私は、サーバー側のSendMessage法上のブレークポイントを追加しましたが、それは決してそれを打つんです、しかし、コードを実行すると、jQueryの成功メソッドが呼び出されます。何が原因でしょうか? '

+0

SendMessage内のコードが実行されていないか、デバッグできません。 –

+0

両方、SendMessageコードが実行されていないと私はそれをデバッグすることはできません。 – Fermin

+0

サーバーサイドの方法は実際にASMXまたはWCF WebサービスではなくASPXページですか? URLはaspx Webページを指します。 –

答えて

36

を見てください、あなたは完全な$のアヤックス()構文を使用する必要があります。

$.ajax({ 
    type: "POST", 
    url: "MessagePopup.aspx/SendMessage", 
    data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // Do something interesting here. 
    } 
}); 

はこれを参照してください。それが必要な理由の詳細については、投稿してください。http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

編集:拡張子は.asmxに変更されず、.aspxのままです。

+4

これは動作して、このコードの違いは、URLはMessagePopup.aspxであり、asmxではないということです。みんなありがとう。 – Fermin

+0

@Dave Ward:すぐに使えるサンプルを作ってくれてありがとう! – delliottg

+0

あなたは私の問題についていくつかの洞察をしてください:http://stackoverflow.com/questions/41752213/why-is-asmx-giving-an-error-when-pulling-data-using-client-scriptありがとう。私のものは '.asmx'です – Si8

2

通常のaspx Webページの代わりにWebサービスを使用する必要があります。 WebページにはWebメソッドを呼び出すサポートがありません。あなたのjQueryリクエストがHTMLページを読み込むと思います。

  1. Fiddler2(IE)またはHttpFox(Firefox)を使用して、クライアント側でAJAX要求と応答をデバッグしてください。
  2. サーバー側でWCF Webサービスを使用します。この場合、SvcConfigEditorおよびSvcTraceViewerを使用して、サーバー側でWebメソッドを構成およびデバッグすることができます。
+0

なぜASMXではなくWCFと言いますか? – Fermin

+0

WCFは現在、.NETの主要な通信技術として推奨されています。それはasmx web servives、より良いテスト容易性(Googleは "ユニットテストWCFサービス"のためのGoogle)上の能力のトンを持っています。 戦略的に、WCFは正しい学習方法です。 asmxとWCFの詳細については、この記事を参照してください。 http://social.msdn.microsoft.com/Forums/en-US/dotnetstocktradersampleapplication/thread/048d8a45-dad8-431f-886c-9aae78862285 –

+0

また、Microsoftのパフォーマンスベンチマーク:http://msdn.microsoft.com/en-us/library/bb310550.aspx –

9

ページメソッドを使用しようとしているようです。

ASP.NET AJAX "ScriptServices" とページのメソッドを呼び出すには、ヘルプのためにここにPage Methods in ASP.NET Ajax

+0

私はページメソッドについて+1知らなかった –

1

ここにあなたの状況で動作するコードがあります。

<script type="text/javascript"> 
    $(document).ready(function() { 

     // Add the page method call as an onclick handler for the button. 
     $("#btnSubmit").click(function() { 

      //get the string from the textbox 
      $.ajax({ 

       type: "POST", 
       url: "testSearch.aspx/GetMyShippingDate", 
       contentType: "application/json; charset=utf-8", 
       data: "{'tracking_num': '" + $("#txtTrackingNumber").val() + "'}", 
       dataType: "json", 
       success: function (date) { 

        // Replace the div's content with the page method's return. 
        Success(date); 

       }, 
       error: Failed 
      }); 
     }); 
    }); 

    function Success(result) { 
      $("#ParcelShippingDate").html(result.d); 
     } 
     function Failed(result) { 
      alert(result.status + " " + result.statusText); 
     } 

いつも私のために働くしている例があります。

はここで完全な記事http://www.webdeveloperpost.com/Articles/How-to-use-jquery-ajax-in-asp-dot-net-web-page.aspx

それは、これがうまくいかない場合は、バック

2
$.ajax({ 
     type: "POST", 
     url: "MessagePopup.aspx/SendMessage", 
     data: "{subject:'" + subject + "',message:'" + message + ",messageId:'" + messageId + "',pupilId:'" + pupilId +"'}", 
     async: true, 
     cache: false, 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function() {}, 
     error:function (xhr, ajaxOptions, thrownError){ alert(thrownError); } 
    }); 

jqueryのasp.netのメソッド呼び出しを使用する単純な方法をしたいものに適しています..ですその後、web.configファイルに</compilation></system.web>の間のこの

<httpHandlers> 
      <remove verb="*" path="*.asmx"/> 
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=31BF3856AD364E35"/> 
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=31BF3856AD364E35"/> 
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, 
System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
PublicKeyToken=31BF3856AD364E35" validate="false"/> 
     </httpHandlers> 
     <httpModules> 
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, 
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </httpModules> 

を追加...:.AND "構文エラー構文エラー" を与えます。

これは誰かに助けになると思います。jquery関数の横にある数字をWeb.Configに追加する必要があるからです。

関連する問題