web-dev-qa-db-ja.com

チェックボックスリストから最新の選択値を取得するにはどうすればよいですか?

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

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

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

12
Masud Rahman

私がそれを正しく理解した場合、これは私が使用するコードです:

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
    {

    }
}
14

以下は、最新の選択された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 
}

お役に立てれば。

3
mehul9595

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

これは私が(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番目の手法を試してください。

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

0
RPM1984