3

チェック ボックスとボタンのテーブルを含む ASP.NET Web ページがあります。ボタンのクリックが発生したときにチェックされるすべてのチェック ボックスの ID を見つける必要があります。ID のリストが収集されたら、それをサーバーに渡す必要があります。jQueryとPageMethodsを使用してそれを行うことができます。

コードビハインドファイルのボタンクリックハンドラーでこれを達成するにはどうすればよいですか? つまり、ボタンのクリック時にチェックされるすべてのチェック ボックスの ID です。

コード ビハインド ファイルには、チャートを作成して PDF にエクスポートする関数がいくつか含まれており、チェックされたチェック ボックスに基づいてチャートが作成されるため、コード ビハインドで実行したいと考えています。

提案してください。

乾杯

4

4 に答える 4

3

チェックボックスがサーバー コントロールの場合は、チェックボックスのリスト アイテムを繰り返し処理し、ボタン クリック イベントでチェックされているものを見つけます。

チェックボックスが HTML コントロールの場合は、javascript を使用して非表示の HTML 入力コントロールに値を入力し、ボタン クリック イベントでこの値にアクセスします。

于 2010-01-12T06:16:35.803 に答える
2

チェックボックスにサーバーコントロールを使用していない場合、またはチェックボックスが実行時に動的に追加された場合に使用できる以前の回答の代わりに、ポストバックの一部として送信されたフォームコレクションを反復処理することもできます。チェックボックスがオンになっている場合は、IDをキーとして、値を「on」にしてこのコレクションに追加されます。チェックされていない場合、コレクションに追加されません。この方法を使用するには、命名規則に何らかの種類があることを確認して、目的のチェックボックスIDを識別できるようにする必要があります。

    foreach (var key in Request.Form.AllKeys)
    {
        if (key.EndsWith("checkbox", true, null))
        {
            // If entry found then this checkbox has been checked
        }
    }
于 2010-01-12T09:32:13.537 に答える
1

まず、クライアント側でどのチェックボックスが選択されているかを検出しようとしている理由を再考し、それを引数としてフォーム ポストに渡すことをお勧めします。ボタンの onclick イベントでそれらを直接列挙しないのはなぜですか?

次に、最終的な要件があると仮定して、jquery を使用してすべてのチェック ボックスを検出し、それらの ID を非表示のフォーム フィールドに区切られた文字列として格納することをお勧めします。この情報をボタン クリック イベント自体への直接の引数として渡さなければならない理由はわかりませんが、そうすることはお勧めできません。

編集: ASP.NET ボタン コントロールには、これを格納するために使用できる CommandArgument プロパティがありますが、クライアント側から設定できるようには見えません。

于 2010-01-12T06:17:22.713 に答える
1

jQuery を使用してすべての ID を収集したので、すべての ID を配列にプッシュしてから、「;」などの連結演算子を使用して配列を結合することをお勧めします。この連結された値を、属性が設定された非表示のテキスト フィールド<input type='hidden' id='txtHidIds' />に保存します。runat="server"次に、C# からこの隠しフィールドの値を取得します。

txtHidIds.Value

次に、使用した連結演算子を使用して分割します。結果を配列で取得し、すべての ID を含む配列を操作できます。

何かのようなもの

$("#btn1").click(function() {
    var arrChecked = new Array();

    $("input[type='checkbox'].childCheck:checked").each(function() {
        arrChecked.push($(this).attr("id"));
    });

    $("#txtHidIds").val(arrChecked.join(';'));
});
于 2010-01-12T06:27:09.793 に答える