Как найти отмеченный переключатель внутри элемента повторителя?
-
08-07-2019 - |
Вопрос
У меня есть элемент управления 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 для объектов).
Решение
Поскольку вы уже используете javascript для обработки события щелчка переключателя на клиенте, вы можете одновременно обновить скрытое поле с выбранным значением. Р>
Тогда ваш серверный код просто получит доступ к выбранному значению из скрытого поля.
Другие советы
Вы всегда можете использовать Request.Form
чтобы получить отправленный переключатель:
var value = Request.Form["answerVariants"];
Я думаю, что переданное значение по умолчанию соответствует идентификатору <asp:RadioButton />
, который был выбран, но вы всегда можете добавить атрибут значения - даже если он официально не является свойством <=> - и тогда это будет переданное значение: р>
<asp:RadioButton ID="answerVariantRadioButton" runat="server"
GroupName="answerVariants"
Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"
value='<%# DataBinder.Eval(Container.DataItem, "SomethingToUseAsTheValue")%>' />
Я почти уверен, что единственное, что вы можете использовать здесь для LINQ to Objects, - это взять условия из цикла foreach и переместить их в предложение where.
RadioButton checked =
(from item in answerVariantRepeater.Items
let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
where radioButton.Checked
select radioButton).FirstOrDefault();