RadioButtonList: OnSelectedIndexChanged не срабатывает

У меня есть страница aspx, где я динамически добавляю список радиокнопок с событием OnSelectedIndexChanged. В случае, если я проверяю выбранные элементы. у меня 2 шт.

Для первого элемента событие срабатывает хорошо, однако, если я выберу другой вариант, событие не срабатывает: ниже кода..

Событие срабатывает только в том случае, если я перехожу с «Некоторые предоставленные» на «Все предоставленные», иначе оно не работает.

Добавление РБЛ:

                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;
   }

Любая помощь и комментарий очень ценятся


person Yann    schedule 07.07.2011    source источник
comment
Я подозреваю, что вы добавляете свои параметры в RadioButtonList с теми же значениями. Можете ли вы опубликовать код, который добавляет элементы в RadioButtonList.   -  person Yiğit Yener    schedule 07.07.2011
comment
Смотрите мой ответ ниже. Я добавил его немного поздно, но этот результат высок в Google, поэтому решил, что это поможет.   -  person trgraglia    schedule 26.07.2012


Ответы (4)


Это для тех, кто найдет этот вопрос в Google:

На RadioButtonList задайте для свойства AutoPostBack значение true.

RadioButtonList OnSelectedIndexChanged

person trgraglia    schedule 26.07.2012

У меня есть эта проблема, и я решил ее.

Чтобы вызвать событие onselectedindexchanged в RadioButtonList , отметьте следующие пункты:

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

и в Page_Load установите их с кодом:

     rdlCondition.AutoPostBack = true;
     rdlCondition.SelectedIndexChanged += new EventHandler (rdlCondition_SelectedIndexChanged);
person Harry    schedule 02.07.2013

Глядя на приведенный выше код, кажется, что он много раз используется повторно. Я немного реорганизовал ваш код (при условии, что вы ничего не пропустили). Имейте в виду, я никогда не проверял это.

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;
   }
}

Я знаю, что это не поможет вашей текущей проблеме, но это всего лишь предложение. Если бы вы могли опубликовать код, в котором вы фактически добавляете значения в список, я мог бы помочь немного больше.

EDIT: Ваша проблема может заключаться в том, что вы не устанавливаете значение своих элементов, а только текст. Попробуйте вместо этого использовать rbl_MinCriteria.SelectedItem.Text =="All provided".

person Gage    schedule 07.07.2011
comment
Я периодически добавлял значения в элементы списка. Но он все еще не работает! Я также начал полностью с нуля, удалил код для создания списка и написал его с самого начала. Все та же проблема - person Yann; 07.07.2011
comment
@Yann, ты пробовал использовать SelectedItem.Text? Как вы добавляете элементы в список? Можете ли вы опубликовать код? - person Gage; 07.07.2011
comment
вот как я добавляю элементы: ListItem a = new ListItem(); a.Value = Все предоставлено; a.Text = Все предоставлено; ЭлементСписка b = новый ЭлементСписка(); b.Value = Некоторые предоставлены; b.Text = Некоторые предоставлены; И я пробовал оба: SelectedItems AND selectedValue dControl_b.Items.Add(a); dControl_b.Items.Добавить(b); - person Yann; 07.07.2011
comment
у меня также есть еще один RBI с постбэком в той же форме.. этот работает отлично. только этот новый RBL id сводит меня с ума.. АААА :D - person Yann; 07.07.2011
comment
@Yann, вы вызываете dControl_b.Databind() после добавления элементов? Если вы отлаживаете приложение, оно достигает точки останова только тогда, когда вы переключаете значения в одну сторону, а не в другую? - person Gage; 07.07.2011
comment
я добавил dControl_b.Databind(), но это ничего не изменило. Но извините, я не понял вас по другому вопросу. - person Yann; 07.07.2011
comment
@Yann, поставьте точку останова в событии SelectedIndexChanged (щелкните область слева от кода) и посмотрите, сработает ли она при переключении между элементами. Если это так, то проблема заключается в ваших операторах if. - person Gage; 07.07.2011
comment
Это произошло только в том случае, если я перехожу с «Некоторые предоставленные» на «Все предоставленные». Если я переключаюсь с «Все предоставленные» на «Некоторые», при условии, что событие не срабатывает, поэтому точка останова не срабатывает. - person Yann; 07.07.2011
comment
@ Янн, у кого-то в этом посте была такая же проблема, как и у тебя. forums.asp.net/t/1076253.aspx/ У вас отключено состояние просмотра на вашей странице/элементе управления. Это может быть причиной того, что это происходит. Также другим решением может быть установка выбранного индекса на -1 после добавления элементов в список. - person Gage; 07.07.2011
comment
Привет всем, даже со всей вашей помощью мне не удалось заставить этот элемент управления работать должным образом. Я немного изменил поток в своей форме и знаю, что использую флажок. Тем не менее спасибо за вашу помощь!!! - person Yann; 08.07.2011
comment
Это не ответ ... переформатирование и «может быть» не помогают и занимают много места, чтобы не сказать ничего полезного. - person trgraglia; 26.07.2012

Я сделал образец 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.

Итак, я боюсь, вы сделали что-то не так в другом месте. Удачи.

person Bikee    schedule 07.07.2011
comment
Привет, Бикаш, единственная разница между твоим кодом и моим в том, что я создаю элемент управления в отдельной функции. Но эта функция также вызывается в событии загрузки страницы. Что я просто не понимаю, почему событие срабатывает, если я выбираю все предоставленные, но нет, если я выбираю некоторые, при условии, что событие связано с элементом управления, а не с выбранным элементом - person Yann; 07.07.2011
comment
Привет Янн, ты запустил мой код? Если нет, то попробуйте создать новый сайт. Просто вставьте мой код в code-behind, поставьте точки останова в каждом операторе if и посмотрите, попадется он туда или нет. Я уверен, что он попадет в каждый случай пожара. Таким образом, вы обнаружите, что проблема кроется в другом. Затем добавьте еще фрагмент кода и повторите попытку. Или пришлите мне свой код. - person Bikee; 07.07.2011