如何在Asp.net中调用webmethod C#

我想使用以下代码在asp.net c#application中调用web方法

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!!! "); } }); 

C#代码:

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

但它总是调用page_load。 我该如何解决?

这有点晚了,但我偶然发现了这个问题,试图解决我自己的问题。 然后我意识到我在ajaxpost中有这条线错了:

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

它应该是:

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

以及WebMethod:

 public static string AddTo_Cart(string quantity, string itemId) 

这解决了我的问题。

希望它对其他人也有帮助。

如果没有正确定义, $.Ajax()中有很多元素会导致问题。 我建议用最基本的forms重写你的javascript,你很可能会发现它工作正常。

脚本示例:

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

WebMethod示例:

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

我不确定为什么这不起作用,它在我的测试中工作正常。 但这里有一种可能有用的替代技术。

不要在AJAXurl中调用该方法,只需使用页面.aspxurl,并将该方法作为参数添加到数据对象中。 然后当它调用page_load时,您的数据将在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!!! "); } }); 

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); } } 

这里的一个问题是,当您从ajax调用传递字符串时,您的方法需要int值。 如果需要,尝试将其更改为字符串并在web方法内部进行解析:

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

编辑 :或从ajax调用传递int参数。

问题出在[System.Web.Services.WebMethod] ,添加[WebMethod(EnableSession = false)] ,你可以摆脱页面生命周期,默认情况下,EnableSession在页面中为真,并使页面在生命周期中生效事件..

有关详细信息,请参阅下面的页面http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx

在发送之前,JSON.stringify数据参数。

Necro’ing这个问题;)

您需要将发送的数据更改为Stringified JSON,这样您就可以将Ajax调用模块化为单个可支持的函数。

第一步:提取数据结构

 /*** * This helper is used to call WebMethods from the page WebMethods.aspx * * @method - String value; the name of the Web Method to execute * @data - JSON Object; the JSON structure data to pass, it will be Stringified * 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.stringify(data), type: "POST", dataType: "json", contentType: "application/json; charset=utf-8", beforeSend: beforeSend, success: success, error: error }) } 

第二步:概括WebMethod

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

第三步:在需要的地方拨打电话

这可以在任何地方,JS文件,HTML文件或服务器端构造中调用。

 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!!!"); }); 

这是你的答案。 使用

  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]); } }); } 

你的C#网络方法应该是

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

从任何按钮click或任何其他html控件event您可以使用参数调用javascript方法,该参数依次调用webmethod以获取json格式的值。