2

使用RadioButtonList控件时,我可以使用以下内容访问代码隐藏中的选定值:

rbMyButtons.SelectedValue

但是,我想改用HtmlInputRadioButton控件,因为这些控件可以让我更好地控制呈现的标记。如果我使用的是<input type="radio" runat="server" />then 的列表,据我所知,我必须这样做:

if (rbMyButtonsOption1.Checked)
{
    ...
}
else if (rbMyButtonsOption2.Checked)
{
    ...
}
else if ...

有没有办法可以模仿RadioButtonList.SelectedValue 使用的行为Request.Form["name"]

4

3 回答 3

3

这是我的做法:

首先,将 Html 控件包装在面板或类似的分组对象中(面板将呈现为 div):

<asp:Panel runat="server" ID="ButtonList" ClientIDMode="Static">
   <input type="radio" name="seasons" value="Spring" runat="server" />Spring <br/>
   <input type="radio" name="seasons" value="Summer" runat="server" /> Summer <br/>
   <input type="radio" name="seasons" value="Fall" runat="server" /> Fall <br/>
   <input type="radio" name="seasons" value="Winter" runat="server" /> Winter <br/>
</asp:Panel>

然后,创建一个扩展方法来访问面板的 ControlCollection 属性并遍历集合:

public static class HelperFunctions
{
    public static string GetRadioButtonValue(this ControlCollection collection)
    {
        foreach (var control in collection)
        {
            if (control is HtmlInputRadioButton)
            {
                var radioControl = ((HtmlInputRadioButton)control);
                if (radioControl.Checked)
                {
                    return radioControl.Value;
                }
            }
        }

        //If no item has been clicked or no Input Radio controls are present we return an empty string
        return String.Empty;
    }
}

最后,您可以轻松获得价值:

var selectedValue = ButtonList.Controls.GetRadioButtonValue();
于 2013-06-25T13:02:39.070 回答
1

我做了一些搜索来找到这个,所以即使这个问题已经超过 1 年了,我也认为它可能很有用......

我刚刚遇到这个问题。我需要使用 use [input type="radio" runat="server" ...] 因为我必须针对每个选择包含额外的 HTML "data-*" 属性。

我在这里使用了两个答案的组合来提供对我有帮助的解决方案。

我的 HTML 看起来像:

<div id="pnlOpts" runat="server">
   <input type="radio" name="rblReason" runat="server" value="1" /> <label>Opt 1</label><br />
   <input type="radio" name="rblReason" runat="server" value="3" data-att="1" /> <label>Supplied Reason 1 </label><br />
   <input type="radio" name="rblReason" runat="server" value="3" data-att="2" /> <label>Supplied Reason 2 </label><br />
   <input type="radio" name="rblReason" runat="server" value="3" data-att="3" /> <label>Supplied Reason 3 </label><br />
</div>

我的代码隐藏看起来像:

if(pnlOpts.Controls.OfType<HtmlInputRadioButton>().Any(a=>a.Checked))
{
    HtmlInputRadioButton selected = pnlOpts.Controls.OfType<HtmlInputRadioButton>().Where(a => a.Checked).FirstOrDefault();
    var btnValue = selected.Value;
    var dataAttVal = selected.Attributes["data-att"];
    ...
}
于 2014-08-18T09:58:17.347 回答
0

您可以使用 LINQ 模仿这种行为:

var radioButtons = new[] { rbMyButtonsOption1, rbMyButtonsOption2 };
var checkedRadioButton = radioButtons.FirstOrDefault(i => i.Checked);
if (checkedRadioButton != null)
{
    // do something...
}
于 2013-06-25T11:59:22.883 回答