我正在建立一个网站来建立自己的蛋糕。每个蛋糕都有基本价格和某些选项。一些选项(例如草莓馅)为蛋糕增加了额外的价格。此价格位于数据库中,由功能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;
}
答案 0 :(得分: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);
}
});
答案 1 :(得分:0)
要通过JavaScript调用网络方法,请确保使用网络方法所在的<System.Web.Script.Services.ScriptService()>
class进行通话。此外,如果您决定将Web方法添加到sperate文件中,为了实现可伸缩性,您需要添加对脚本管理器的引用。
<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);
}
});