2013-01-07 2 views
0

나는 자신의 케이크를 만들 사이트를 만들고 있습니다. 각 케이크에는 기본 가격 및 특정 옵션이 있습니다. 일부 옵션 (예 : 딸기 채우기)은 케이크에 가격을 추가합니다. 이 가격은 데이터베이스에 있으며 기능 ID로 찾을 수 있습니다.PageMethods codebehind에서 함수를 호출하지 않음 - 정의되지 않음

새로운 옵션을 선택할 때마다 가격을 업데이트하는 함수를 작성하려고합니다. 기능을 선택하려면 드롭 다운 상자와 체크 박스 목록이 있습니다. 옵션 텍스트를 표시하지만 옵션 값은 기능 ID입니다. 나는 통과하고 각 선택된 항목의 값을 얻을 수있는 JS 함수가 있습니다.

제 아이디어는 ddl/cbl이 변경 될 때마다 additionalPrice를 호출하여 피처 ID로 데이터베이스를 쿼리하고 추가 가격을 추가하는 것입니다. 문제는 PageMethods가 정의되지 않는다는 것입니다. VS2012에서 타이핑 할 때 필자는 자동 완성을 사용하지 않으며 연한 파란색 대신 검정색으로 표시됩니다. 나는 이와 같은 다른 문제를 읽었으며, 나는 모든 것을 올바르게하고 있다고 확신한다. 나는이 작업을 일단 여기 내 코드 ...

<asp:ScriptManager ID="ScriptManager1" 
EnablePageMethods="true" 
EnablePartialRendering="true" runat="server" /> 

<script> 
$('.featureDropDown').change(function (a) { 
      //var price = $.ajax({ url: 'ajax/totalproductprice.ashx', async: false }).responseText; 
      var price = PageMethods.additionalPrice(); 
      alert(price); 
</script> 

Codebehind가 ...

[WebMethod] public static int additionalPrice() 
    { 
     return 77; 
    } 

additionalPrice 더 많은 로직을 것입니다. 이 코드를 사용하여 드롭 다운 목록을 변경하면 '정의되지 않음'을 알립니다.

편집 : 이제 첫 번째 질문이 해결되었으므로 다른 질문이 있습니다. additionalPrice에서 반환 된 값으로 최종 가격을 보유하는 레이블을 설정하려고합니다. 나는 PageMethods에서 onSuccess 메서드를 사용하여이 작업을 수행하려고합니다. 난 그냥 페이지 상단에 일반 레이블이 - 여기

<asp:Label ID="lblPrice" runat="server" /> 

내는 onSuccess, 내가 시도했던 다른 것입니다. 그들 중 누구도 라벨에 아무 것도하지 않습니다. ASP.NET AJAX PageMethods를 사용하는 경우

function onSuccess(result) { 
      alert(result + "worked"); 
      $('.lblPrice').attr("text", result); 
      $('.lblPrice').attr('text', function() { 
       $(this).attr('text', result); 
      }) 
      $('.lblPrice').text(result); 
      document.getElementById('lblPrice').value = result; 
      document.all('lblPrice').innerHTML = result; 
     } 

답변

1

당신이 전화에 두 개의 추가 매개 변수를 전달하여 가입 할 수있는 성공과 실패 콜백 함수가 있습니다. 이 경우 당신은 당신이 사용하는 호출되어 있는지 확인

$(function() { 
    $('.featureDropDown').change(function (a) { 
     //var price = $.ajax({ url: 'ajax/totalproductprice.ashx', async: false }).responseText; 
     PageMethods.additionalPrice(onSuccess, onFailure); 
    }); 

    function onSuccess(result) { 
     alert(result); 
    } 

    function onFailure(error) { 
     alert(error); 
    } 
}); 
+0

감사합니다. 필요하지 않았다. 또한, 이제는 가격 인 'undefined'를 경고 한 다음 77을 대기 중입니다. 가격을 77로 설정하지 않았습니다. 나는 또한 % code $ ('. lblPrice'). attr ("src", price); $ ('.lblPrice') .attr ('src', function() { $ (this) .attr ('src', price); })' 아무 것도 변경되지 않았습니다. 가격 변수를 설정 한 후입니다. 이것은 lblPrice를 전혀 변경하지 않습니다. 나는 그것을 OnSuccess로 옮기려고했으나 또한 작동하지 않았다. 새로운 가격으로 라벨을 바꾸는 것에 대한 아이디어가 있습니까? –

+0

''undefined '를 반환하는'PageMethods.additionalPrice (onSuccess, onFailure);와 같은'price'를 설정 했으므로'undefined'를 경고합니다.가격을'onSuccess' 함수,'var price = result; '에 설정하려면'onSuccess' 함수에 라벨을 설정하는 로직을 넣을 수 있습니다. – MikeM

+0

나는'onSuccess' 톤으로 이동했으나 여전히 작동하지 않았습니다. 이것은 내가 가진 것입니다.'function onSuccess (result) { alert (result + "worked"); $ ('. lblPrice'). attr ("text", result); } } 죄송합니다. 줄 바꿈을하지 않으셔서 죄송합니다. 어떻게해야할지 모르십니까? (예 : "text", function() . 그것은 77worked를 경고하지만, 레이블을 변경하지 않습니다. –

0

자바 스크립트에서 웹 메소드를 호출하는 데 사용할 수 있습니다 귀하의 웹 방법이 있습니다 <System.Web.Script.Services.ScriptService()>class. 또한 확장 성을 높이기 위해 웹 메소드를 확장 성 파일에 추가하려는 경우 스크립트 관리자에 참조를 추가해야합니다.

<asp:ScriptManager ID="scriptManager" runat="server"> 
    <Services> 
     <asp:ServiceReference Path="~/WebServices/SomeWebServices.asmx" /> 
    </Services> 
</asp:ScriptManager> 

예, 그리고 이전에 지적한대로. 그래도 문제가 있다면 문제를 알려주세요.

$(function() { 
    $('.featureDropDown').change(function (a) { 
     //var price = $.ajax({ url: 'ajax/totalproductprice.ashx', async: false }).responseText; 
     PageMethods.additionalPrice(onSuccess, onFailure); 
    }); 

    function onSuccess(result) { 
     alert(result); 
    } 

    function onFailure(error) { 
     alert(error); 
    } 
}); 
관련 문제