Llamar a un método del lado del servidor ASP.NET a través de jQuery

Intento llamar a un método del lado del servidor desde el lado del cliente a través de jQuery. Mi código es el siguiente:

Lado del servidor:

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

Lado del cliente:

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

He agregado un punto de interrupción en el método SendMessage del lado del servidor, pero nunca lo estoy ejecutando, pero cuando ejecuto el código, se llama al método de éxito de jQuery. ¿Qué podría estar causando esto?

Para llamar a ASP.NET AJAX “ScriptServices” y métodos de página, debe usar la syntax completa de $ .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. } }); 

Consulte esta publicación para obtener detalles sobre por qué es necesario: http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Editar: La extensión no cambia a .asmx sino que permanece como .aspx.

Parece que estás intentando utilizar un método de página.

Mire aquí Métodos de página en ASP.NET Ajax para ayuda

Debe usar el servicio web en lugar de la página web regular de aspx. Las páginas web no tienen soporte para llamar a los métodos web, creo que su solicitud de jQuery carga la página HTML. Te sugiero dos cosas:

  1. Utilice Fiddler2 (con IE) o HttpFox (con Firefox) para depurar las solicitudes y respuestas AJAX en el lado del cliente.
  2. Use el servicio web WCF en el lado del servidor. en este caso, puede usar SvcConfigEditor y SvcTraceViewer para configurar y depurar métodos web en el lado del servidor.
 $.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 esto no funciona … y da “Error de syntax: error de syntax” … luego agrega esto

          

entre y en su archivo Web.Config.

Espero que esto ayude a alguien porque me tomó un tiempo darme cuenta de que además de la función jquery, tengo que agregar eso en Web.Config.

Aquí hay un código que podría funcionar en su situación.

  

Hay un ejemplo que siempre me ha funcionado.

Aquí está el artículo completo http://www.webdeveloperpost.com/Articles/How-to-use-jquery-ajax-in-asp-dot-net-web-page.aspx

Funciona bien para aquellos que quieren una manera directa de utilizar el método jquery asp.net volver a llamar