0

私はあなた自身のケーキを作るためのサイトを構築しています. 各ケーキには基本価格と特定のオプションがあります。一部のオプション (例: ストロベリー フィリング) は、ケーキに追加料金を追加します。この価格はデータベース内にあり、機能 ID によって検出されます。

新しいオプションを選択するたびに価格を更新する関数を作成しようとしています。機能を選択するために、ドロップダウン ボックスとチェックボックス リストがあります。オプションのテキストが表示されますが、オプションの値は機能 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>

コードビハインド...

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

additionalPrice は、これが機能するようになると、より多くのロジックを持ちます。このコードでは、ドロップダウンリストを変更すると、「未定義」と警告されます。

編集:最初の質問が解決されたので、別の質問があります。最終価格を保持するラベルを additionalPrice から返された値に設定しようとしています。PageMethods の onSuccess メソッドでこれを実行しようとしています。ページの上部に一般的なラベルがあります -

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

これが私のonSuccessであり、私が試したさまざまなことです。それらのどれもラベルに何もしません。

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;
        }
4

2 に答える 2

1

ASP.NET AJAXを使用する場合PageMethods、呼び出しに2つの追加パラメーターを渡すことでサブスクライブできる、成功と失敗のコールバック関数があります。この場合、あなたは使用したいと思うでしょう

$(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);
    }
});
于 2013-01-07T23:30:31.640 に答える
0

JavaScriptからWebメソッドを呼び出すには、Webメソッドが配置されている<System.Web.Script.Services.ScriptService()> クラスを使用して呼び出していることを確認してください。また、Webメソッドを別のファイルに追加する場合は、スケーラビリティを向上させるために、スクリプトマネージャーへの参照を追加する必要があります。

<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);
    }
});
于 2013-01-07T23:45:42.933 に答える