1

列の 1 つに CheckBox がある CompositeDataBoundControl があります。CheckBox は、OnCheckboxChanged ハンドラーで AutoPostBack=True に設定されます。チェックボックスを変更すると、それに応じてデータベースの値を true/false に更新します。これはすべてうまくいきます。

一度に10個のレコードを表示するページングを備えたjquery datatables.netプラグインを追加しました。最初のページでチェックボックスを更新すると、すべて正常に動作します。次に、2 番目のページに移動してチェックボックスを選択すると、そのレコードが更新されますが、ページ 1 でチェックボックスを変更したときに OnCheckBoxChanged ハンドラーが起動されます。そして、それらのチェックボックスをリセットします。

-> コード ビハインドのどこにも他の明示的なハンドラー宣言はなく、これは C# であるため、Handles 句は発行されません。->ここでデータバインディングの可能性があると話している人がいますが、問題はデータテーブルを使用する場合のみです。だから、それが正しいかどうかはわかりませんが、私はそれを調べています。

編集ここでサンプルを確認してください 。

問題を再現する手順: 1) page1 でいくつかのチェックボックスを選択します。チェックボックスはメッセージをポストバックして更新します。

2) page2 に移動し、チェックボックスを選択します。chbx はポストバックし、グリッドは page1 に移動します。page1 で選択した chbx が選択されていないことに注意してください。page2 に移動すると、選択内容が保持されていることがわかります。

編集これが問題だと思われます。現在、それを実装するのは少し難しいと感じています。その上で助けが必要です。

何が起こっているのかわかりません。誰かが同様の問題を抱えていましたか?

4

1 に答える 1

0

問題は、非表示の行をポストバックしないデータテーブルでした。したがって、次のリンクで説明されているように、それらをテーブルに戻す必要があります: http://datatables.net/forums/discussion/3099/x&page=1

ASP.NET ScriptManager/UpdatePanel を使用する場合は、ここで説明したように、beginRequest の前にそれらを追加し直す必要がありました。

ASP.NET 非同期ポストバックの前に不要なフォーム要素を無効化または削除するにはどうすればよいですか?

サンプル プロジェクトに実装したら、いくつかのコードを追加します。これは私が実装したコードです:

//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);
     }
}
于 2013-03-05T23:08:38.473 に答える