programing

Asp.net 에서 웹 메소드 호출하는 방법 C#

powerit 2023. 10. 20. 14:53
반응형

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.stringifydata 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

반응형