RadioButtonList SelectedItem всегда возвращает EmptyString - PullRequest
0 голосов
/ 24 марта 2009

У меня есть этот пользовательский список radiobuttonlist, который я использую на своей странице .aspx, чтобы можно было заставить GroupName реально работать, так как у меня будет 2 элемента управления RadiobuttonList на одной странице .aspx:

public class CustRadioButtonList : RadioButtonList, IRepeatInfoUser
{
    void IRepeatInfoUser.RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)
    {
        RadioButton radioButton = new RadioButton();
        radioButton.Page = this.Page;
        radioButton.GroupName = "radioButtonGroup";
        radioButton.ID = this.ClientID + "_" + repeatIndex.ToString();
        radioButton.Text = this.Items[repeatIndex].Text;
        radioButton.Attributes["value"] = this.Items[repeatIndex].Value;
        radioButton.Checked = this.Items[repeatIndex].Selected;
        radioButton.TextAlign = this.TextAlign;
        radioButton.AutoPostBack = this.AutoPostBack;
        radioButton.TabIndex = this.TabIndex;
        radioButton.Enabled = this.Enabled;

        radioButton.RenderControl(writer);
    }
}

Так что это просто простое расширение, в котором я установил GroupName, чтобы быть уверенным, что все радиокнопки, созданные этим RadioButtonList, имеют одинаковое GroupName, так что теперь, если кто-то выбирает значение из RadiobuttonList1, он отменяет выбор любого значения, выбранного в Radiobutton2. и наоборот (так что они являются взаимоисключающими наборами радиокнопок).

Примечание: Списки радиобуттон определенно связываются с помощью вызова метода, который заключен в проверку для! Page.IsPostBack, так что проблема здесь не возникает.

Вот пример, где я использую его на своей странице .aspx:

 <aj:CustRadioButtonList checked="false"  ID="rblEmail" runat="server" />

 <aj:CustRadioButtonList checked="false"  ID="rblReason" runat="server" />

Здесь, в моем коде, я проверяю selectedValue из rblEmail в пределах нажатия кнопки даже на моей странице ... но он всегда возвращает пустую строку , даже если я выбрал пункт в списке:

    protected void btnContinue_Click(object sender, EventArgs e)
    {
        _actionID = rblEmail.SelectedValue;

Я провел целый день, пытаясь выяснить, почему я продолжаю получать пустую строку, когда ясно выбрал значение в rblEmail. То же самое относится и к другому радиобаттонлисту rblReason. В любом случае при проверке из-за кода я получаю пустую строку для SelectedValue.

Если вы посмотрите на разметку, вот как это выглядит:

<table id="rblEmail" checked="false" border="0">
    <tr>
        <td><input id="rblEmail_0" type="radio" name="radioButtonGroup" value="0" /><label for="rblEmai_0">All Offers</label></td>

    </tr><tr>
        <td><input id="rblEmail_1" type="radio" name="radioButtonGroup" value="1" /><label for="rblEmail_1">week</label></td>
    </tr><tr>
        <td><input id="rblEmail_2" type="radio" name="radioButtonGroup" value="2" /><label for="rblEmail_2">month</label></td>
    </tr><tr>
        <td><input id="rblEmail_3" type="radio" name="radioButtonGroup" value="3" /><label for="rblEmail_3">Holiday</label></td>
    </tr>

</table>
            </div>
...

<table id="rblReason" checked="false" border="0">
    <tr>
        <td><input id="rblReason_0" type="radio" name="radioButtonGroup" value="1" /><label for="rblReason_0">I receive</label></td>
    </tr><tr>
        <td><input id="rblReason_1" type="radio" name="radioButtonGroup" value="2" /><label for="rblReason_1">I have no need</label></td>
    </tr><tr>
        <td><input id="rblReason_2" type="radio" name="radioButtonGroup" value="3" /><label for="rblReason_2">Other</label></td>

    </tr>
</table> 

Ответы [ 2 ]

0 голосов
/ 03 января 2014

Похоже, что вы заполняете RadioButtonList при загрузке страницы - Если это так - убедитесь, что вы окружили свое население RadioButtonList с Блок If / Then / Postback: если не Page.IsPostBack тогда заполнить ваш RadioButtonList конец если

например:

        if (!IsPostBack)
        {
            loadradiobuttonlist();
        }
0 голосов
/ 25 марта 2009

Не знаю точно, почему это не работает, но кажется, что небольшой javascript обеспечит легкий обходной путь. Вместо пользовательского элемента управления просто используйте обычные объекты RadioButton ... затем присоедините некоторый JavaScript, чтобы очистить выделение в List1, когда что-то в List2 выбрано, и наоборот.

Не знаете, зачем использовать здесь какой-либо ретранслятор, если вы уже знаете, сколько будет радиокнопок? (согласно вашим комментариям выше)

...