如何在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
格式的值。