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





asmx (5)


Vous devez utiliser le service Web au lieu de la page Web aspx standard. Les pages Web ne supportent pas les méthodes Web, je crois 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 requêtes et les réponses AJAX du côté client.
  2. Utilisez le service Web WCF du côté serveur. Dans ce cas, vous pouvez utiliser SvcConfigEditor et SvcTraceViewer pour configurer et déboguer les méthodes Web côté serveur.

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

Du 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 ne la frappe jamais, mais lorsque j'exécute le code, la méthode de succès jQuery est appelée. Qu'est-ce qui pourrait causer cela?







$.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 "Erreur de syntaxe: erreur de syntaxe" ... 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> et </system.web> dans votre fichier Web.Config.

J'espère que cela aidera quelqu'un parce que cela m'a pris un certain temps pour comprendre qu'à côté de la fonction jquery, je dois ajouter cela dans Web.Config.




Pour appeler ASP.NET AJAX "ScriptServices" et les méthodes de page, 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 post pour plus de détails sur pourquoi cela 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.




Utilisez la classe TimeZoneInfo utilisant les éléments suivants:

var myDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Parse("2012-09-30T23:00:00.0000000Z"));






asp.net jquery web-services asmx