我使用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方法无法正常工作。我无法找出出错的地方。
答案 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",