我想使用以下代码在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。我该如何解决?
答案 0 :(得分:10)
如果没有正确定义,$.Ajax()
有很多元素会导致问题。我建议用最基本的形式重写你的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;
}
答案 1 :(得分:8)
这有点晚了,但我偶然发现了这个问题,试图解决我自己的问题。然后我意识到我在ajax帖子中有这条线错了:
data: "{'quantity' : " + total_qty + ",'itemId':" + itemId + "}",
应该是:
data: "{quantity : '" + total_qty + "',itemId: '" + itemId + "'}",
以及WebMethod:
public static string AddTo_Cart(string quantity, string itemId)
这解决了我的问题。
希望它对其他人也有帮助。
答案 2 :(得分:1)
我不确定为什么这不起作用,它在我的测试中工作正常。但这是一种可能有帮助的替代技术。
不要在AJAX网址中调用该方法,只需使用页面.aspx网址,并将该方法作为参数添加到数据对象中。然后,当它调用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#Page Load
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);
}
}
答案 3 :(得分:0)
这里的一个问题是,当您从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参数。
答案 4 :(得分:0)
问题出在[System.Web.Services.WebMethod]
,添加[WebMethod(EnableSession = false)]
并且您可以摆脱页面生命周期,默认情况下,EnableSession在页面中为true,并使页面在生命周期事件中生效。< / p>
请参阅以下页面了解更多详情 http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx
答案 5 :(得分:0)
在发送之前,您需要JSON.stringify
data parameter
。
答案 6 :(得分:0)
Necro关于这个问题;)
您需要将发送的数据更改为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]
public static string AddTo_Cart ( object items ) {
var js = new JavaScriptSerializer();
var json = js.ConvertToType<Dictionary<string , int>>( 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!!!");
});
答案 7 :(得分:-1)
这是你的答案。 使用
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
格式的值。