35

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

サーバ側:

    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 の成功メソッドが呼び出されます。何が原因でしょうか?

4

5 に答える 5

38

ASP.NET AJAX の「ScriptServices」とページ メソッドを呼び出すには、完全な $.ajax() 構文を使用する必要があります。

$.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.
  }
});

それが必要な理由の詳細については、この投稿を参照してください

編集: 拡張子は .asmx に変わりませんが、.aspx のままです。

于 2009-05-20T10:16:43.910 に答える
9

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

ヘルプについては、ASP.NET Ajax のページ メソッドを参照してください。

于 2009-05-20T10:11:50.677 に答える
2

通常の aspx Web ページではなく、Web サービスを使用する必要があります。Web ページは Web メソッドの呼び出しをサポートしていません。代わりに、jQuery リクエストが HTML ページをロードすると思います。次の 2 つのことをお勧めします。

  1. Fiddler2 (IE で) または HttpFox (Firefox で) を使用して、クライアント側で AJAX 要求と応答をデバッグします。
  2. サーバー側で WCF Web サービスを使用します。この場合、SvcConfigEditorSvcTraceViewerを使用して、サーバー側で Web メソッドを構成およびデバッグできます。
于 2009-05-20T10:09:20.760 に答える
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); }  
     });

これが機能せず、「構文エラー: 構文エラー」が表示される場合は、これを追加します

<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>

</compilation></system.web>Web.Config ファイルの間。

jquery関数のほかにWeb.Configに追加する必要があることを理解するのに時間がかかったので、これが誰かの助けになることを願っています。

于 2011-08-27T23:03:27.420 に答える
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

jquery asp.netメソッドのコールバックを使用する簡単な方法が必要な場合に適しています

于 2010-12-22T23:17:00.557 に答える