35 votes

Appel d'une méthode ASP.NET côté serveur via jQuery

J'essaie d'appeler une méthode côté serveur depuis le côté client via jQuery. Mon code est le suivant :

Côté serveur :

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

Côté client :

$("#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;
});

J'ai ajouté un point d'arrêt sur la méthode SendMessage côté serveur, mais il n'est jamais atteint, mais lorsque j'exécute le code, la méthode de réussite jQuery est appelée. Quelle pourrait être la cause de ce problème ?

37voto

Dave Ward Points 36006

Pour appeler les "ScriptServices" ASP.NET AJAX et les méthodes des pages, vous devez utiliser la syntaxe complète $.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.
  }
});

Voir ce billet pour savoir pourquoi c'est nécessaire : http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Edit : L'extension ne change pas en .asmx mais reste .aspx.

9voto

Stephen Newman Points 1375

Il semble que vous essayez d'utiliser une méthode de page.

Jetez un coup d'œil ici Méthodes de page dans ASP.NET Ajax pour de l'aide

2voto

Artem Koshelev Points 4983

Vous devez utiliser un service web au lieu d'une page web aspx ordinaire. Les pages web ne permettent pas d'appeler des méthodes web, je pense que votre requête jQuery charge la page HTML à la place. Je vous suggère deux choses :

  1. Utilisez Fiddler2 (avec IE) ou HttpFox (avec Firefox) pour déboguer les demandes et les réponses AJAX du côté client.
  2. Utilisez le service web WCF du côté du serveur. Dans ce cas, vous pouvez utiliser les éléments suivants SvcConfigEditor y SvcTraceViewer pour configurer et déboguer les méthodes web côté serveur.

2voto

Amit Points 21

Bonjour, vous pouvez aussi essayer cet exemple si vous cherchez toujours la même chose.

http://www.dotnetspark.com/kb/1453-call-server-side-function-using-jquery-asp-net.aspx

2voto

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

Si cela ne fonctionne pas...et donne "Syntax Error : syntax error"...alors ajoutez ceci

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

entre </compilation> y </system.web> dans votre fichier Web.Config.

J'espère que cela aidera quelqu'un, car il m'a fallu un certain temps pour comprendre qu'en plus de la fonction jquery, je devais l'ajouter dans Web.Config.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X