通过jQuery调用ASP.NET服务器端方法

Fer*_*min 35 asp.net jquery web-services asmx

我试图通过jQuery从客户端调用服务器端方法.我的代码如下:

服务器端:

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

客户端:

$("#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;
});
Run Code Online (Sandbox Code Playgroud)

我在服务器端SendMessage方法上添加了一个断点,但它从来没有打过它,但是当我运行代码时,会调用jQuery成功方法.可能导致这种情况的原因是什么?`

Dav*_*ard 37

要调用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.
  }
});
Run Code Online (Sandbox Code Playgroud)

有关为何需要的详细信息,请参阅此帖子:http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

编辑:扩展名不会更改为.asmx但仍为.aspx.

  • 得到它的工作,只有这个代码的差异是网址是MessagePopup.aspx,而不是asmx.多谢你们. (4认同)

Ste*_*man 9

看起来你正在尝试使用页面方法.

在ASP.NET Ajax中查看页面方法以获取帮助