jquery datables - ASP.NET复选框不止一次触发

时间:2013-03-05 00:59:26

标签: jquery asp.net jquery-datatables

我有一个CompositeDataBoundControl,其中一个列中有一个CheckBox。 使用OnCheckboxChanged处理程序将CheckBox设置为AutoPostBack = True。现在,在复选框更改后,我相应地将我的数据库值更新为true / false。一切正常。

现在我添加了带分页的jquery datatables.net插件,一次显示10条记录。当我更新第一页上的复选框时,一切正常。然后,如果我移动到第二页并选择一个复选框,它会更新该记录,但随后它开始触发OnCheckBoxChanged处理程序,因为我更改了第1页上的复选框。在所有这些时间,它会重置这些复选框。

- >在代码隐藏中的任何地方都没有其他显式的处理程序声明,这是C#所以没有Handles子句问题。 - >有人talking here它可能是数据绑定,但问题只是在使用数据表时。所以不确定是不是这样,但我正在研究它。

修改检查sample here

重现问题的步骤: 1)在第1页上选择几个复选框。复选框将回发并更新消息。

2)现在转到第2页并选择一个复选框。 chbx将回发,网格将移至page1。请注意,您在第1页中选择的chbx丢失了选择。如果您转到第2页,您将看到所做的选择仍然存在。

修改似乎this is the issue。现在发现很难实现。需要帮助。

我不确定发生了什么。有人有类似的问题吗?

1 个答案:

答案 0 :(得分:0)

问题是数据表没有回发隐藏的行。所以我需要将它们添加回我的表中,如以下链接所述: http://datatables.net/forums/discussion/3099/x&page=1

虽然在使用ASP.NET ScriptManager / UpdatePanel时,我甚至必须在这里提到的beginRequest之前添加它们:

How do I disable or remove unnecessary form elements before an ASP.NET asynchronous postback?

一旦我在我的示例项目中实现它,我将添加一些代码。这是我实施的代码:

//code-behind Page_Load
ScriptManager.RegisterOnSubmitStatement(this, this.GetType(), "beforePostback", "beforePostback()");

// JS code
var table;
$(function(){
    table = $(".mygrid").dataTable();
});

function beforePostback() {
    //table is the object that holds the dataTable 
    if(table!='undefined' && $(".mygrid thead").length>0){
         hiddenRows = table.fnGetHiddenNodes();
                $('table.mygrid tbody').append(hiddenRows);
     }
}