12

私は現在問題に直面しています。asp.netチェックボックスリストから最新の選択された値を取得するにはどうすればよいですか?

チェックボックスリストの項目をループすることで、選択された最高のインデックスとその値を取得できますが、ユーザーがチェックボックスを低いインデックスから高いインデックスに順番に選択することは期待されていません。それで、それをどのように処理するのですか?

イベントを生成する正確なリストアイテムを特定するのに役立つイベントキャプチャシステムはありますか?

4

3 に答える 3

19

私がそれを正しく理解していれば、これは私が使用するコードです:

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
    int lastSelectedIndex = 0;
    string lastSelectedValue = string.Empty;

    foreach (ListItem listitem in CheckBoxList1.Items)
    {
        if (listitem.Selected)
        {
            int thisIndex = CheckBoxList1.Items.IndexOf(listitem);

            if (lastSelectedIndex < thisIndex)
            {
                lastSelectedIndex = thisIndex;
                lastSelectedValue = listitem.Value;
            }
        }
    }
}

イベントを生成する正確なリストアイテムを特定するのに役立つイベントキャプチャシステムはありますか?

CheckBoxListのイベントCheckBoxList1_SelectedIndexChangedを使用します。リストのチェックボックスをクリックすると、このイベントが呼び出され、必要な条件をチェックできます。

編集:

次のコードを使用すると、ユーザーが最後に選択したチェックボックスインデックスを取得できます。このデータを使用して、ユーザーが最後に選択した値を取得できます。

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
    string value = string.Empty;

    string result = Request.Form["__EVENTTARGET"];

    string[] checkedBox = result.Split('$'); ;

    int index = int.Parse(checkedBox[checkedBox.Length - 1]);

    if (CheckBoxList1.Items[index].Selected)
    {
        value = CheckBoxList1.Items[index].Value;
    }
    else
    {

    }
}
于 2010-09-07T01:02:19.233 に答える
3

以下は、最新の選択されたCheckBoxListアイテムを提供するコードです。

string result = Request.Form["__EVENTTARGET"];
string [] checkedBox = result.Split('$'); ;
int index = int.Parse(checkedBox[checkedBox.Length - 1]);

if (cbYears.Items[index].Selected)
{
  //your logic 
}
else
{
  //your logic 
}

お役に立てれば。

于 2012-02-07T09:55:37.663 に答える
0

あなたのことはわかりませんが、ユーザーとして、チェックボックスの項目がチェックされるたびにページがポストバックされることを望んでいません。

これは私が(jQuery)で行く解決策です:

フォームでサーバー側の非表示フィールドを宣言します。

<asp:HiddenField ID="HiddenField1" runat="server" EnableViewState="true" />

次に、クリックされたチェックボックスを保存するためのチェックボックスのクライアント側イベントハンドラーを接続します。

$('.someclassforyourcheckboxes').click(function() {
   $('#HiddenField1').val($(this).attr('id'));

これは、クリックされた「最新」チェックボックスのIDを保存するための軽量のメカニズムです。また、チェックボックスにautopostback = trueを設定して、不要なポストバックを実行する必要はありません。

jQueryを使用する必要はありません-通常のJavascriptを使用できますが、なぜもっと多くの作業を行うのですか?=)

次に、実際にポストバックを実行するとき(送信ボタンをクリックすると思います)、非表示フィールドの値を確認するだけです。

もちろん、チェックボックスをクリックするたびにポストバックしたい場合を除いて、これが必要なシナリオを想像することはできません(おそらく、UpdatePanelを使用しています)。

編集

チェックボックスリストのHTMLは次のようになります。

<input type="checkbox" name="vehicle" value="Bike" /> I have a bike

したがって、次の3つにアクセスできます。

車両=$(this).attr('name');

バイク=$(this).attr('value');

私は自転車を持っています=$(this).html();

データバインドされた値にアクセスしようとしている場合は、2番目の手法を試してください。

それを試してみてください。

于 2010-09-07T01:16:59.873 に答える