无法使用jQuery ajax调用Page Method

时间:2014-03-11 12:38:52

标签: c# jquery asp.net ajax jquery-ui

我使用jQueryUI创建了一个可排序的ListView,现在我一直试图将其保存回数据库。以下是我创建ListView的方法:

<asp:ListView ID="ListViewItems" runat="server">
<LayoutTemplate>
    <div id="sortable1" class="connectedSortable">
        <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder>
    </div>
</LayoutTemplate>
<ItemTemplate>
    <li class="ui-state-default" id='id_<%# Eval("Item_ID") %>'><%# Eval("Item_Name") %></li>
</ItemTemplate>

ListView下有一个按钮(div),点击它后应该将重新排序的列表保存回db:

<div class="btn-info" id="UpdateOrder" onclick="SendUpdatedOrder()">Update Order</div>  

JS文件内容:

function SendUpdatedOrder() {
var order = $('#sortable1').sortable('toArray').join(',').replace(/id_/gi, '');
//alert(order);
$.ajax({
    type: "POST",
    url: "~/AdminEditItems.aspx/UpdateRuleOrder",
    data: '{}',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: OnSuccess,
    failure: function (response) {
        alert(response.d);
    }
});} 

我在AdminEditItems.aspx.cs中创建了一个页面方法 -

 [WebMethod]
    public static void UpdateRuleOrder(string order)
    {
        ....do something...
    }   

执行时,根本没有调用UpdateRuleOrder方法。我在JS的UpdateRuleOrder函数中发出的任何警报都被成功调用,但ajax方法无法正常工作。我无法找出出错的地方。

1 个答案:

答案 0 :(得分:3)

三件事:

从网址中删除波浪号和正斜杠,例如

url: "AdminEditItems.aspx/UpdateRuleOrder",

在数据中加入你的论点,即

data: '{ "order" : "' + order + '"}',

您还需要EnablePageMethods中的ScriptManager,即

<asp:ScriptManager runat="server" EnablePageMethods="true">

<强>更新

我还注意到您没有返回任何内容,更改您的UpdateRuleOrder方法以返回您的对象,您将能够像这样访问它:

var myObject = response.d;

因为它位于url上方的目录中,所以:

url: "../AdminEditItems.aspx/UpdateRuleOrder",