Asp.net 에서 웹 메소드 호출하는 방법 C#
다음 코드를 사용하여 asp.net c# 어플리케이션에서 웹 메소드를 호출하고 싶습니다.
쿼리:
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라고 부릅니다.어떻게 고치죠?
몇 가지 요소가 있습니다.$.Ajax()
정확하게 정의되지 않으면 문제가 발생할 수 있습니다.자바스크립트를 가장 기본적인 형태로 다시 쓰는 것을 추천합니다. 아마 잘 작동할 것입니다.
스크립트 예제:
$.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;
}
조금 늦었지만, 저는 이런 문제를 해결하기 위해 우연히 발견했습니다.아약스 포스트에서 이 대사가 잘못되었다는 것을 깨달았습니다.
data: "{'quantity' : " + total_qty + ",'itemId':" + itemId + "}",
다음이 되어야 합니다.
data: "{quantity : '" + total_qty + "',itemId: '" + itemId + "'}",
웹 메소드뿐만 아니라 다음 작업도 수행합니다.
public static string AddTo_Cart(string quantity, string itemId)
그리고 이것으로 제 문제가 해결되었습니다.
다른 사람에게도 도움이 되길 바랍니다.
이 질문 네크로잉 ;)
Stringified JSON으로 전송되는 데이터를 변경해야 Ajax 호출을 지원 가능한 단일 함수로 모듈화할 수 있습니다.
1단계 : 데이터 구축 추출
/***
* 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!!!");
});
여기서 한 가지 문제는 당신의 메소드가 당신이 ajax 호출에서 문자열을 전달하는 동안 int 값을 기대한다는 것입니다.필요한 경우 웹 메서드 내부에서 문자열 및 구문 분석으로 변경합니다.
[System.Web.Services.WebMethod]
public static string AddTo_Cart(string quantity, string itemId)
{
//parse parameters here
SpiritsShared.ShoppingCart.AddItem(itemId, quantity);
return "Add";
}
Edit : 또는 ajax 호출의 Passint 매개 변수입니다.
왜 안 되는지 모르겠네요, 시험에서는 잘 되네요.하지만 여기에 도움이 될 수 있는 대안적인 기술이 있습니다.
AJAX url에서 메서드를 호출하는 대신 .aspx url 페이지를 사용하고 메서드를 데이터 개체의 매개 변수로 추가합니다.그런 다음 page_load를 호출하면 데이터가 Request에 포함됩니다.양식 변수.
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);
}
}
문제는 에 있습니다.[System.Web.Services.WebMethod]
,더하다[WebMethod(EnableSession = false)]
페이지 라이프 사이클을 제거할 수 있습니다. 기본적으로 EnableSession은 페이지에서 참이며 라이프 사이클 이벤트를 통해 페이지를 라이프 사이클로 만들 수 있습니다.
자세한 사항은 아래 페이지를 참고하시기 바랍니다. http://msdn.microsoft.com/en-us/library/system.web.configuration.pagessection.enablesessionstate.aspx
할 필요가 있습니다.JSON.stringify
그data parameter
보내기 전에
여기 당신의 답변이 있습니다. 사용하세요.
jquery.json-2.2.min.js
and
jquery-1.8.3.min.js
자바스크립트:
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
체재를 갖추다
언급URL : https://stackoverflow.com/questions/19110170/how-to-call-webmethod-in-asp-net-c-sharp
'programing' 카테고리의 다른 글
페이스북 ID를 int 또는 varchar로 저장하시겠습니까? (0) | 2023.10.25 |
---|---|
데이터베이스 필드의 표준 길이 목록 (0) | 2023.10.20 |
CentOS 6.5에서 PHP 업그레이드 (파이널) (0) | 2023.10.20 |
pthread에 대한 start_routine_create return void* 및 void*를 생성하는 이유 (0) | 2023.10.20 |
jQuery를 사용하여 WordPress에 이미지 로드 (0) | 2023.10.20 |