Comment appeler webmethod en Asp.net C #

Je souhaite appeler une méthode Web dans l’application asp.net c # à l’aide du code suivant

Jquery:

jQuery.ajax({ url: 'AddToCart.aspx/AddTo_Cart', type: "POST", data: "{'quantity' : " + total_qty + ",'itemId':" + itemId + "}", contentType: "application/json; charset=utf-8", dataType: "json", beforeSend: function () { alert("Start!!! "); }, success: function (data) { alert("a"); }, failure: function (msg) { alert("Sorry!!! "); } }); 

Code C #:

 [System.Web.Services.WebMethod] public static ssortingng AddTo_Cart(int quantity, int itemId) { SpiritsShared.ShoppingCart.AddItem(itemId, quantity); return "Add"; } 

Mais il appelle toujours page_load. Comment puis-je résoudre ce problème?

C’est un peu tard, mais je suis tombé sur ce problème, essayant de résoudre mon propre problème de ce genre. J’ai alors réalisé que j’avais mal écrit cette ligne dans le message ajax:

 data: "{'quantity' : " + total_qty + ",'itemId':" + itemId + "}", 

CA devrait etre:

 data: "{quantity : '" + total_qty + "',itemId: '" + itemId + "'}", 

Ainsi que le WebMethod à:

 public static ssortingng AddTo_Cart(ssortingng quantity, ssortingng itemId) 

Et cela a résolu mon problème.

J’espère que cela pourra être utile à quelqu’un d’autre.

Il y a pas mal d’éléments de $.Ajax() qui peuvent causer des problèmes s’ils ne sont pas définis correctement. Je suggérerais de réécrire votre javascript dans sa forme la plus élémentaire, vous constaterez probablement que cela fonctionne bien.

Exemple de script:

 $.ajax({ type: "POST", url: '/Default.aspx/TestMethod', data: '{message: "HAI" }', contentType: "application/json; charset=utf-8", success: function (data) { console.log(data); }, failure: function (response) { alert(response.d); } }); 

Exemple de WebMethod:

 [WebMethod] public static ssortingng TestMethod(ssortingng message) { return "The message" + message; } 

Je ne sais pas pourquoi cela ne fonctionne pas, cela fonctionne bien pour mon test. Mais voici une technique alternative qui pourrait aider.

Au lieu d’appeler la méthode dans l’URL AJAX, utilisez simplement l’URL de la page .aspx et ajoutez-la en tant que paramètre dans l’object de données. Ensuite, lorsqu’il appelle page_load, vos données seront dans la variable Request.Form.

jQuery

 jQuery.ajax({ url: 'AddToCart.aspx', type: "POST", data: { method: 'AddTo_Cart', quantity: total_qty, itemId: itemId }, dataType: "json", beforeSend: function () { alert("Start!!! "); }, success: function (data) { alert("a"); }, failure: function (msg) { alert("Sorry!!! "); } }); 

Charge de page C #:

 if (!Page.IsPostBack) { if (Request.Form["method"] == "AddTo_Cart") { int q, id; int.TryParse(Request.Form["quantity"], out q); int.TryParse(Request.Form["itemId"], out id); AddTo_Cart(q,id); } } 

Un problème ici est que votre méthode attend des valeurs int lorsque vous passez une chaîne depuis un appel ajax. Essayez de le changer en chaîne et d’parsingr dans la méthode Web si nécessaire:

 [System.Web.Services.WebMethod] public static ssortingng AddTo_Cart(ssortingng quantity, ssortingng itemId) { //parse parameters here SpiritsShared.ShoppingCart.AddItem(itemId, quantity); return "Add"; } 

Éditer : ou Passer les parameters int de l’appel ajax.

Le problème se trouve à [System.Web.Services.WebMethod] , ajoutez [WebMethod(EnableSession = false)] et vous pourrez vous débarrasser du cycle de vie d’une page. Par défaut, EnableSession est vrai dans Page et faire en sorte que la page apparaisse dans le cycle de vie. événements..

Veuillez vous référer à la page ci-dessous pour plus de détails http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx

JSON.ssortingngify le paramètre de données avant de l’envoyer.

Necro’ing cette question;)

Vous devez modifier les données envoyées sous forme de fichier JSON Ssortingngified afin de modulariser l’appel Ajax en une seule fonction pouvant être prise en charge.

Première étape: extraire la construction des données

 /*** * This helper is used to call WebMethods from the page WebMethods.aspx * * @method - Ssortingng value; the name of the Web Method to execute * @data - JSON Object; the JSON structure data to pass, it will be Ssortingngified * before sending * @beforeSend - Function(xhr, sett) * @success - Function(data, status, xhr) * @error - Function(xhr, status, err) */ function AddToCartAjax(method, data, beforeSend, success, error) { $.ajax({ url: 'AddToCart.aspx/', + method, data: JSON.ssortingngify(data), type: "POST", dataType: "json", contentType: "application/json; charset=utf-8", beforeSend: beforeSend, success: success, error: error }) } 

Deuxième étape: généraliser WebMethod

 [WebMethod] public static ssortingng AddTo_Cart ( object items ) { var js = new JavaScriptSerializer(); var json = js.ConvertToType>( items ); SpiritsShared.ShoppingCart.AddItem(json["itemId"], json["quantity"]); return "Add"; } 

Troisième étape: Appelez-le là où vous en avez besoin

Cela peut être appelé à peu près n’importe où, fichier JS, fichier HTML ou construction côté serveur.

 var items = { "quantity": total_qty, "itemId": itemId }; AddToCartAjax("AddTo_Cart", items, function (xhr, sett) { // @beforeSend alert("Start!!!"); }, function (data, status, xhr) { // @success alert("a"); }, function(xhr, status, err){ // @error alert("Sorry!!!"); }); 

Voici ta réponse. utilisation

  jquery.json-2.2.min.js and jquery-1.8.3.min.js 

Javascript:

 function CallAddToCart(eitemId, equantity) { var itemId = Number(eitemId); var quantity = equantity; var dataValue = "{itemId:'" + itemId+ "', quantity :'"+ quantity "'}" ; $.ajax({ url: "AddToCart.aspx/AddTo_Cart", type: "POST", dataType: "json", data: dataValue, contentType: "application/json; charset=utf-8", success: function (msg) { alert("Success"); }, error: function () { alert(arguments[2]); } }); } 

et votre méthode web C # devrait être

 [WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public static ssortingng AddTo_Cart(int itemId, ssortingng quantity) { SpiritsShared.ShoppingCart.AddItem(itemId, quantity); return "Item Added Successfully"; } 

À partir de n’importe quel click bouton ou de tout autre event contrôle html event vous pouvez appeler la méthode javascript avec le paramètre qui à son tour appelle la webmethod pour obtenir la valeur au format json .