2011-07-07 167 views
6

我有一個aspx頁面,我動態地添加一個單選按鈕列表與OnSelectedIndexChanged事件。如果我檢查選擇的項目。我有2個項目。RadioButtonList:OnSelectedIndexChanged not firing

的第一個項目,該事件被解僱很好,但是如果我選擇其他選項的事件在不觸發:下面的代碼..

時,只有射擊是我從「提供一些」改變「所有提供」 另一種方式它不工作

添加RBL:

   RadioButtonList dControl_b = new RadioButtonList(); 
       dControl_b.ID = "rbl_MinCriteria"; 
       dControl_b.RepeatDirection = System.Web.UI.WebControls.RepeatDirection.Horizontal; 
       dControl_b.CssClass = "Font"; 
       dControl_b.Font.Name = "Arial"; 
       dControl_b.Font.Size = 8; 
       dControl_b.ToolTip = ""; 
       dControl_b.SelectedIndex = -1; 
       dControl_b.SelectedIndexChanged += new EventHandler(rbl_MinCriteria_SelectedIndexChanged); 
       dControl_b.AutoPostBack = true; 

檢查所選項目:

if(rbl_MinCriteria.SelectedItem.ToString() == "All provided") 
    { 
     cbl_MinimumCriteria.Items[0].Selected = true; 
     cbl_MinimumCriteria.Items[1].Selected = true; 
     cbl_MinimumCriteria.Items[2].Selected = true; 
     cbl_MinimumCriteria.Items[3].Selected = true; 
     cbl_MinimumCriteria.Enabled = false; 

     //************************************************************* 
     if (ddl_CountryOccurence.SelectedValue != "Please choose") 
     { 
      ddl_CountryOccurence.Enabled = false; 
     } 
     else 
     { 
      ddl_CountryOccurence.Enabled = true; 
     } 

     //************************************************************* 
     if (tb_DueDate.Text != "") 
     { 
      tb_DueDate.Enabled = false; 
     } 
     else 
     { 
      tb_DueDate.Enabled = true; 
     } 

     OtherControlI.Enabled = false; 
     OtherControlII.Enabled = false; 
     OtherControlIII.Enabled = false; 
    } 
    if (rbl_MinCriteria.SelectedItem.ToString() == "Some provided") 
    { 
     cbl_MinimumCriteria.Items[0].Selected = false; 
     cbl_MinimumCriteria.Items[1].Selected = false; 
     cbl_MinimumCriteria.Items[2].Selected = false; 
     cbl_MinimumCriteria.Items[3].Selected = false; 
     cbl_MinimumCriteria.Enabled = true; 

     //************************************************************* 
     if (ddl_CountryOccurence.SelectedValue != "Please choose") 
     { 
      ddl_CountryOccurence.Enabled = false; 
     } 
     else 
     { 
      ddl_CountryOccurence.Enabled = true; 
     } 

     //************************************************************* 
     if (tb_DueDate.Text != "") 
     { 
      tb_DueDate.Enabled = false; 
     } 
     else 
     { 
      tb_DueDate.Enabled = true; 
     } 

     OtherControlI.Enabled = false; 
     OtherControlI.SelectedIndex = -1; 
     OtherControlII.Enabled = false; 
     OtherControlII.SelectedIndex = -1; 
     OtherControlIII.Enabled = false; 
     OtherControlIII.SelectedIndex = -1; 
    } 

任何幫助和評論是非常讚賞

+1

我懷疑你使用相同的添加您的選項單選按鈕列表值。你可以發佈添加項目到RadioButtonList的代碼嗎? –

+0

請參閱下面的答案。我稍微加了一點,但是Google的這個結果很高,所以認爲它會有所幫助。 – trgraglia

回答

1

我做了一個樣本aspx頁面,並在.aspx添加一個面板如下圖所示:

<asp:Panel ID="Panel1" runat="server"></asp:Panel> 

而且在後面的代碼,我添加以下代碼:

protected void Page_Load(object sender, EventArgs e) 
    { 
     RadioButtonList dControl_b = new RadioButtonList(); 
     dControl_b.ID = "rbl_MinCriteria"; 
     dControl_b.RepeatDirection = System.Web.UI.WebControls.RepeatDirection.Horizontal; 
     dControl_b.CssClass = "Font"; 
     dControl_b.Font.Name = "Arial"; 
     dControl_b.Font.Size = 8; 
     dControl_b.ToolTip = ""; 
     dControl_b.SelectedIndex = -1; 
     dControl_b.SelectedIndexChanged += new   EventHandler(rbl_MinCriteria_SelectedIndexChanged); 
     dControl_b.AutoPostBack = true; 

     dControl_b.Items.Add(new ListItem("All provided")); 
     dControl_b.Items.Add(new ListItem("Some provided")); 

     Panel1.Controls.Add(dControl_b); 
    } 
    protected void rbl_MinCriteria_SelectedIndexChanged(object sender,EventArgs e) 
    { 
     RadioButtonList rbl_MinCriteria = (RadioButtonList)Panel1.FindControl("rbl_MinCriteria"); 
     if(rbl_MinCriteria.SelectedItem.ToString() == "All provided") 
     { 

     } 
     if (rbl_MinCriteria.SelectedItem.ToString() == "Some provided") 
     { 

     } 

    } 

事件每次激發單選按鈕listitem被更改。

所以,恐怕你在其他地方做錯了什麼。祝你好運。

+0

嗨Bikash,你的代碼和我的唯一區別在於,我在一個獨立的函數中創建控件。但是這個函數在頁面加載事件中也被調用。我只是不明白爲什麼事件是如果我選擇「所有提供」但沒有,如果我選擇「一些提供」事件是觸發一個控件,而不是選定的項目 – Yann

+0

嗨Yann,你有沒有跑我的代碼?如果不是,那麼通過創建一個新網站來嘗試它。只需將代碼粘貼到代碼隱藏中,在每個if語句中添加斷點並查看它是否存在。我相信它在任何事件中都會發生火災。這樣你會發現問題在別處。然後添加更多代碼片段,然後重試。或者把你的代碼發給我。 – Bikee

1

看上面的代碼似乎有很多代碼重用。我重新組織了一下你的代碼(假設你沒有留下任何東西)。請記住,我從來沒有測試過它。

protected void rbl_MinCriteria_SelectedIndexChanged(object sender,EventArgs e) 
{ 
    if (rbl_MinCriteria.SelectedIndex<0) return; //If nothing is selected then do nothing 

     OtherControlI.Enabled = false; 
     OtherControlII.Enabled = false; 
     OtherControlIII.Enabled = false; 
    if(rbl_MinCriteria.SelectedItem.ToString() == "All provided") 
    { 
     cbl_MinimumCriteria.Items[0].Selected = true; 
     cbl_MinimumCriteria.Items[1].Selected = true; 
     cbl_MinimumCriteria.Items[2].Selected = true; 
     cbl_MinimumCriteria.Items[3].Selected = true; 
     cbl_MinimumCriteria.Enabled = false; 

    } 
    if (rbl_MinCriteria.SelectedItem.ToString() == "Some provided") 
    { 
     cbl_MinimumCriteria.Items[0].Selected = false; 
     cbl_MinimumCriteria.Items[1].Selected = false; 
     cbl_MinimumCriteria.Items[2].Selected = false; 
     cbl_MinimumCriteria.Items[3].Selected = false; 
     cbl_MinimumCriteria.Enabled = true; 

     OtherControlI.SelectedIndex = -1; 
     OtherControlII.SelectedIndex = -1; 
     OtherControlIII.SelectedIndex = -1; 
    } 

    //************************************************************* 
    if (ddl_CountryOccurence.SelectedValue != "Please choose") 
    { 
     ddl_CountryOccurence.Enabled = false; 
    } 
    else 
    { 
     ddl_CountryOccurence.Enabled = true; 
    } 
    //************************************************************* 
    if (tb_DueDate.Text != "") 
    { 
    tb_DueDate.Enabled = false; 
    } 
    else 
    { 
     tb_DueDate.Enabled = true; 
    } 
} 

我知道這並不能幫助你解決當前的問題,但這只是一個建議。如果你可以發佈代碼的地方,你實際上將值添加到列表中,我可以幫助更多。

編輯:你的問題可能是你沒有設置你的項目的價值,只有文本。請嘗試使用rbl_MinCriteria.SelectedItem.Text =="All provided"

+0

我間歇性地將值添加到列表項。但它仍然不起作用!我也從頭開始完全開始,刪除代碼來創建列表並從頭開始編寫它。仍然是同樣的問題 – Yann

+0

@Yann,你嘗試使用SelectedItem.Text嗎?你如何將項目添加到列表中?你能發佈代碼嗎? – Gage

+0

這是我如何添加項目:ListItem a = new ListItem(); a.Value =「全部提供」; a.Text =「全部提供」; ListItem b = new ListItem(); b.Value =「一些提供」; b.Text =「一些提供」;我試了兩個,SelectedItems AND selectedValue dControl_b.Items.Add(a); dControl_b.Items.Add(b); – Yann

2

我有這個問題,並解決它。

對於提高單選按鈕列表的onselectedindexchanged事件,檢查以下項目:

 <asp:RadioButtonList ID="rdlCondition" runat="server" AutoPostBack="True" 
     onselectedindexchanged="rdlCondition_SelectedIndexChanged"> 

,並在Page_Load設置它們的代碼:

 rdlCondition.AutoPostBack = true; 
    rdlCondition.SelectedIndexChanged += new EventHandler (rdlCondition_SelectedIndexChanged);