2010-09-07 83 views
9

我目前面臨一個問題。如何從asp.net複選框列表中獲取最新的選定值?如何從複選框列表中獲取最新的選定值?

通過循環複選框列表的項目,我可以獲得最高的選定索引及其值,但不希望用戶從低到高順序選擇複選框。那麼,如何處理呢?

是否有任何事件捕獲系統可以幫助我識別生成事件的確切列表項?

+1

最近您的意思是列表中最後一個複選框? – 2010-09-07 00:45:30

+1

使用客戶端腳本,比如jQuery或其他來做到這一點... - http://jQuery.com/ – 2010-09-07 00:55:27

回答

13

如果我的理解是正確的,這是代碼我會使用:

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。當單擊列表的CheckBox時,將調用此事件,然後您可以檢查所需的任何條件。

編輯:

下面的代碼使您可以獲取用戶選擇的最後一個複選框指數。有了這些數據,用戶就可以得到最後選擇的值。

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 
    { 

    } 
} 
+0

如果用戶選擇第三個複選框,然後第二個複選框,這個函數不會聲明第三個複選框是最後一個複選框選擇器的值? – RPM1984 2010-09-07 01:10:06

+0

從我的理解他想知道在列表中選擇的最後一個複選框。如果情況並非如此,則應修改此代碼。 – 2010-09-07 01:12:29

+2

我認爲他想要「最新」,而不是「最後」(有序)。我可能是錯的壽。 – RPM1984 2010-09-07 01:18:03

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 

所以,你可以訪問下面三件事情:

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

自行車 = $(this).attr('value');

我有一輛自行車 = $(this).html();

如果你試圖訪問數據綁定值,嘗試第二種方法。

試試看。

+0

其實我幾天前正在使用Coolite dropdownlist。該控件有一個名爲SelectedItems的屬性,它是根據選擇順序的selecteditem的數組。我在asp.net複選框列表中查找類似的內容。 – 2010-09-07 01:42:42

+0

另一件事是,我使用多選的checkboxlist和複選框是從數據庫中的數據綁定。所以使用JavaScript,我只能跟蹤ID,但不知道我可以跟蹤爲該複選框填充的值。這個值不是複選框中顯示的文本,而是與複選框關聯的其他一些ID,我可以從我的代碼隱藏頁面中獲得該複選框。你可以請張貼一些示例代碼:你可以請張貼一些代碼來處理javascript的數據綁定複選框嗎? – 2010-09-07 01:50:08

+0

@Masud你需要跟蹤什麼?複選框項目的值?如果是這樣,只需使用$(this).html(),它會給你複選框項的文本(即值) – RPM1984 2010-09-07 01:51:46

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 
} 

希望這會有所幫助。

相關問題