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

一旦我让它工作,additionPrice 将有更多的逻辑。使用此代码,当您更改下拉列表时,它会警告“未定义”。

编辑:现在第一个问题已经解决了,我还有另一个问题。我正在尝试将保存最终价格的标签设置为从附加价格返回的值。我正在尝试在 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,您可以通过向调用传递两个附加参数来订阅成功和失败回调函数。在这种情况下,您需要使用

$(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 回答