2008-11-14 3 views
8

У меня есть элемент управления Repeater на ASPX-странице, определенный как это:Как найти проверенный RadioButton внутри Repeater Item?

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

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

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

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

RadioButton checkedButton = null; 

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

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

ответ

2

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

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

+0

Либо оригинал так в вашем вопросе, или это будет хорошо работать. – Kon 2008-11-14 15:01:26

2

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

RadioButton checked = 
    (from item in answerVariantRepeater.Items 
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton") 
    where radioButton.Checked 
    select radioButton).FirstOrDefault(); 
+0

Возможно, можно избежать использования обоих элементов и FindControl в пользу некоторой коллекции Controls. – 2008-11-14 14:55:04

6

Вы всегда можете использовать 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")%>' />