我正在使用jquery插件tablednd
$(document).ready(function () {
$('#mygridview').tableDnD();
})
使我的gridview中的行可拖动。 当我拖动一行时,我想在asp.net中调用一个函数来保存行的位置。但我无法在gridview上找到适当的事件,只会在点击一行时做出反应。
tableDnd中有一个onDrop方法。
$(document).ready(function () {
$('#mygridview').tableDnD({
onDrop: function(table, row) {
});
})
但是我怎么能从那里调用一个asp.net方法呢?我已经阅读了一些关于ajax的帖子,但我不明白。
我还阅读了有关使用PageMethods
的内容,但它没有调用我的功能。
问题是如何编写在我的数据库中的表上执行更新的内容?
更新:
我使用IPostBackEventHandler方法解决了它。
我必须使用IPostBackEventHandler扩展我的用户控件和页面 然后在用户控件和页面上添加public void RaisePostBackEvent(string eventArgument)函数。最后:
onDrop: function (table, row) {
__doPostBack('<%= this.UniqueID %>', 'Select');
}
如果有人遇到onDrop的问题,解决方案是您必须为每行提供ID:
var i = 0;
$("#<%= gridviewID.ClientID %>").find('tr').each(function () {
$(this).attr('id', i++);
});
在tablednd的启动之上。
谢谢!
答案 0 :(得分:2)
通常有两种方法,一种使用AJAX,另一种使用回发。
AJAX方式:
将ScriptManager添加到页面中,如下所示:
<asp:ScriptManager runat="server"
ID="ScriptManager1"
EnablePageMethods="true"
EnablePartialRendering="true"
/>
将服务器端方法作为公共静态调用。还要使用System.Web.Services.WebMethod属性标记它,如下所示:
[WebMethod]
public static string DoServerStuff(string parameter)
{
return "Parameter passed: " + parameter;
}
通过PageMethods类从客户端调用它,如下所示:
function doClientStuff() {
var result = PageMethods.DoServerStuff('test parameter');
alert(result);
}
使用jQuery做同样的事情检查this。
回发方式:
在客户端调用__doPostback方法,如下所示:
function doClientStuff() {
var result = __doPostBack('<%= this.UniqueID %>', 'Select');
}
在页面的IPostBackEventHandler.RaisePostBackEvent方法中实现服务器端逻辑。
更多关于从客户端here收集回发的信息。