Справка по ASP.NET RadioButtonList. Если я устанавливаю selectedItem, этот элемент не реагирует на событие SelectedIndexChanged.

У меня есть RadioButtonList в моей веб-форме. Я пробовал два разных способа установить выбранный элемент. Я пробовал использовать разметку и код, например событие Page_Load. Он устанавливается и отображается правильно. Моя проблема в том, что выбранный переключатель больше не реагирует на событие SelectedIndexChanged. Остальные элементы работают, как ожидалось, и если я удалю код, устанавливающий selectedItem, радиокнопка будет работать должным образом. Есть ли способ установить переключатель с помощью кода, и он по-прежнему ведет себя так, как я ожидал. Я предполагаю, что если вы принудительно выберете кнопку, она не изменится. Кто-нибудь знает, как это запомнить, чтобы я мог выбрать его по умолчанию, но при этом вести себя так, как я хочу?

 <asp:RadioButtonList ID="rblPaymentType" runat="server" AutoPostBack="True" RepeatDirection="Horizontal"
            RepeatLayout="Flow">
            <asp:ListItem Value="benefit" Text="Benefit" Selected="True"/>
            <asp:ListItem Value="expense" Text="Expense" />
        </asp:RadioButtonList>

Это живет внутри ascx, для которого у меня есть событие

  public delegate void SwitchBenefitTypeHandler(object sender, EventArgs e);
    public event SwitchBenefitTypeHandler SwitchedBenefit;

 protected void Page_Load(object sender, EventArgs e)
    {
        WireEvents();
    }


    private void WireEvents()
    {
        rblPaymentType.SelectedIndexChanged += (sender, args) => SwitchedBenefit(sender, args);

    }

Затем в aspx я связываю функцию-обработчик с этим событием.

if (header is PaymentHeader)
                (header as PaymentHeader).SwitchedBenefit += (paymentForm as PaymentBaseControl).Update;

Наконец, функция-обработчик

public override void Update(object sender, EventArgs e)
    {
        if (sender is RadioButtonList)
        {
            IsExpense = (sender as RadioButtonList).SelectedValue == "expense";
            UpdateCalcFlag();
            UpdateDropDownDataSources();
            UpdatePaymentTypeDropDown();
            ResetBenefitLabels();
            FormatAmountTextBox();
        }
    }

Надеюсь, кода хватит. Все отлично работает, когда я не устанавливаю SelectedItem в RadioButtonList, но мне нужно его установить.

Вот ссылка на кого-то, у кого такая же проблема. Это связано с ASP.NET AJAX. Нажмите здесь Спасибо, ~ ck в Сан-Диего


person Hcabnettek    schedule 18.09.2009    source источник
comment
Трудно сказать, не увидев вашего кода. Не могли бы вы опубликовать фрагмент, связанный с вашей проблемой?   -  person jrummell    schedule 19.09.2009
comment
Вы имеете в виду, что событие срабатывает, если вы нажимаете любую другую радиокнопку, но даже если вы снова нажимаете на предварительно выбранную, событие не срабатывает?   -  person Sean Hanley    schedule 19.09.2009
comment
@Yadyn - да, правильно.   -  person Hcabnettek    schedule 19.09.2009
comment
Думаю, нам понадобится еще больше кода. У меня есть страница в системе, над которой я работаю здесь, на работе, которая имеет почти идентичный RadioButtonList. Макет потока, горизонтальный, с двумя элементами ListItem в разметке, первый из которых выбирается с помощью разметки. SelectedIndexChanged отлично работает. Возможно, вы просто исключили его из примера, но уверены ли вы, что подключаете обработчик событий для SelectedIndexChanged? Я не вижу его в вашей разметке, так вы делаете это при загрузке страницы или что-то в этом роде?   -  person Sean Hanley    schedule 19.09.2009
comment
@Yadyn - да, в декларативной разметке для SelectedIndexChanged не объявлен обработчик событий.   -  person Nirlep    schedule 19.09.2009
comment
@all - Да, обработчик подключен. Я предоставил код выше.   -  person Hcabnettek    schedule 19.09.2009


Ответы (1)


Попробуй это:

radiobutton.Items.FindByText("VALUE").Selected = true;
person Greg Jones    schedule 20.12.2011