Как найти проверенный RadioButton внутри Repeater Item? - PullRequest
9 голосов
/ 14 ноября 2008

У меня есть элемент управления Repeater на ASPX-странице, определенный следующим образом:

<asp:Repeater ID="answerVariantRepeater" runat="server"
    onitemdatabound="answerVariantRepeater_ItemDataBound">
    <ItemTemplate>
        <asp:RadioButton ID="answerVariantRadioButton" runat="server"
            GroupName="answerVariants" 
            Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"/>
    </ItemTemplate>
</asp:Repeater>

Чтобы разрешить выбор только одной радиокнопки во времени, я использовал форму трюка эта статья .

Но теперь, когда форма отправлена, я хочу определить, какой переключатель отмечен.

Я мог бы сделать это:

RadioButton checkedButton = null;

foreach (RepeaterItem item in answerVariantRepeater.Items)
{
    RadioButton control=(RadioButton)item.FindControl("answerVariantRadioButton");
    if (control.Checked)
    {
        checkedButton = control;
        break;
    }
}

но надеюсь, что это можно сделать как-то проще (возможно, через LINQ для объектов).

Ответы [ 3 ]

7 голосов
/ 05 мая 2011

Вы всегда можете использовать Request.Form, чтобы получить отправленный переключатель:

var value = Request.Form["answerVariants"];

Я думаю, что переданное значение по умолчанию соответствует идентификатору <asp:RadioButton />, который был выбран, но вы всегда можете добавить атрибут значения - даже если это официально не свойство <asp:RadioButton /> - и тогда это будет переданное значение:

<asp:RadioButton ID="answerVariantRadioButton" runat="server"
    GroupName="answerVariants" 
    Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"
    value='<%# DataBinder.Eval(Container.DataItem, "SomethingToUseAsTheValue")%>' />
2 голосов
/ 14 ноября 2008

Я почти уверен, что единственное, что вы могли бы использовать здесь для LINQ to Objects, это взять условия из цикла foreach и переместить их в предложение where.

RadioButton checked = 
    (from item in answerVariantRepeater.Items
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
    where radioButton.Checked
    select radioButton).FirstOrDefault();
2 голосов
/ 14 ноября 2008

Поскольку вы уже используете javascript для обработки события щелчка переключателя на клиенте, вы можете одновременно обновить скрытое поле с выбранным значением.

После этого ваш серверный код просто получит доступ к выбранному значению из скрытого поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...