Como encontrar a Radio Button verificado dentro Repeater produto?
-
08-07-2019 - |
Pergunta
Eu tenho um controle Repeater em ASPX páginas definidas como este:
<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>
Para permitir seleccionar apenas um botão de opção no tempo eu usei uma forma truque este artigo .
Mas agora o formulário for apresentado eu quero para determinar qual botão de opção está marcada.
Eu poderia fazer isso:
RadioButton checkedButton = null;
foreach (RepeaterItem item in answerVariantRepeater.Items)
{
RadioButton control=(RadioButton)item.FindControl("answerVariantRadioButton");
if (control.Checked)
{
checkedButton = control;
break;
}
}
mas espero que isso poderia ser feito de alguma forma simplier (talvez via LINQ para objetos).
Solução
Uma vez que você estiver usando javascript já para lidar com o evento de clique de botão de opção no cliente, você pode atualizar um campo escondido com o valor selecionado ao mesmo tempo.
O seu código do servidor, então, basta acessar o valor selecionado do campo oculto.
Outras dicas
Você pode sempre usar Request.Form
para obter o botão de rádio apresentados:
var value = Request.Form["answerVariants"];
Eu acho que os padrões valor enviado para o id do <asp:RadioButton />
que foi selecionado, mas você sempre pode adicionar um atributo de valor - mesmo que ele não é oficialmente uma propriedade <asp:RadioButton />
- e este será, então, o valor apresentado:
<asp:RadioButton ID="answerVariantRadioButton" runat="server"
GroupName="answerVariants"
Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"
value='<%# DataBinder.Eval(Container.DataItem, "SomethingToUseAsTheValue")%>' />
Eu tenho certeza que a única coisa que você poderia usar o LINQ to Objects para aqui seria a de tomar as condições de dentro do loop foreach e movê-los para uma cláusula onde.
RadioButton checked =
(from item in answerVariantRepeater.Items
let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
where radioButton.Checked
select radioButton).FirstOrDefault();