从ASP.NET动态生成的一组单选按钮中获取所选单选按钮

3
我正在使用ASP.NET(2.0)进行开发,我们想要从数据源生成一组单选按钮。使用RadioButtonList很简单,但我们希望与每个单选按钮相关联的文本具有更多的格式...特别是,一些文本应该是常规字体,一些应该是粗体。这似乎不适合RadioButtonList。
使用Repeater,我可以轻松地为DataSet中的每个项目创建一个单选按钮,给它们相同的GroupName,并且在客户端上它们将正常工作...但是当表单提交时,我不清楚如何发现选择了哪个按钮(服务器端)。与RadioButtonList不同,我没有单个包含对象可以从中请求所选项目。
我们也可以使用更互动的方法,通过单击单选按钮将信息发送回服务器,但如果可能的话,我们希望避免额外的Postback。
我是否错过了什么简单的东西?
3个回答

1
把你的单选按钮放在面板中,然后迭代面板的控件集合。
foreach (Control ctrl in Panel1.Controls)
    {
        if (ctrl.GetType().Name == "RadioButton")
        {
            if (((RadioButton)ctrl).Checked)
            {
                //...Do your Stuff..
            }
        }
    }

我会点赞这个答案,因为它肯定能解决问题,也许这是我必须采取的方法...但我不希望这是唯一的解决方案。我希望有更优雅的解决方案(这是对框架能力的抱怨...而不是你的回答!) - Beska

1

这种方法在某些情况下可能有效,但我们希望用户能够选择一个项目,在提交表单之前进行其他工作,而这种解决方案会导致提交。此外,据我所知,itemCommand事件与按钮相关联,但不与单选按钮相关联,因此在这种情况下无法使用。 - Beska
itemcommand不仅与按钮相关联...无论如何,如果您想避免post-backs,您应该修改您的问题,因为itemcommand是处理此问题的“正常”方式。我提供了另一个避免post-backs的答案。 - Chains
或者,如果您可以接受非常有限的后台请求,您可以使用Ajax样式将单选按钮包装在更新面板中。 - Chains
好的观点...我修改了问题,提到在每次点击时将信息发送回服务器对于这种情况并不理想。此外,虽然我没有看到ItemCommand如何与RadioButtons一起使用(与仅使用按钮相比),但你可能是正确的...我可能只是忽略了它。 - Beska
不,你是对的,我没有意识到它不会触发单选按钮 - 这是我的错误。 - Chains

1

基本上就像 @Muhammad 的答案 - 但是使用 Repeater 而不是 Panel。只需在提交表单时调用此子程序即可。

Private Sub rep()
    Dim myRepeater As New Repeater
    Dim myRadio As New RadioButton
    For Each myItem As RepeaterItem In myRepeater.Items
        myRadio = CType(myItem.FindControl("radio1"), RadioButton)
        If myRadio.Checked Then
            'do something
        End If
    Next
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接