.net 如何找到选中的单选按钮使用组名我的代码附加?

xriantvc  于 2022-11-19  发布在  .NET
关注(0)|答案(5)|浏览(112)

我正在尝试使用组名查找checked radio的值。我有返回该值的方法,但是我应该在该方法中传递什么沿着组名
方法在这里,

private string getRadioValue(ControlCollection clts, string groupName)
{
    string ret = "";
    foreach (Control ctl in clts)
    {
        if (ctl.Controls.Count != 0)
        {
            if (ret == "")
                ret = getRadioValue(ctl.Controls, groupName);
        }

        if (ctl.ToString() == "System.Web.UI.WebControls.RadioButton")
        {
            RadioButton rb = (RadioButton)ctl;
            if (rb.GroupName == groupName && rb.Checked == true)
                ret = rb.Attributes["Value"];
        }
    }
    return ret;
}

我用它就像

Oc.aProjectSubmited = getRadioValue(RadioButton,"Aps");

其中,Aps是单选按钮组,但在单选按钮上出现错误“参数无效”。
我期待你的建议,先谢了

afdcj2ne

afdcj2ne1#

这是因为您传递的是RadioButton。您的方法接受ControlCollection,而不是Control
为什么不传递这个.控件来传递页面的整个ControlCollection?或者您可能用来保存要检查的RadioButton的任何其他ControlCollection?
下面是一个例子:

protected void Page_Load(object sender, EventArgs e)
    {
        getRadioValue(this.Controls, "Hello");
    }

    private string getRadioValue(ControlCollection clts, string groupName)
    {
        string ret = "";
        foreach (Control ctl in clts)
        {
            if (ctl.Controls.Count != 0)
            {
                if (ret == "")
                    ret = getRadioValue(ctl.Controls, groupName);
            }

            if (ctl.ToString() == "System.Web.UI.WebControls.RadioButton")
            {
                RadioButton rb = (RadioButton)ctl;
                if (rb.GroupName == groupName && rb.Checked == true)
                    ret = rb.Attributes["Value"];
            }
        }
        return ret;
    }
jvlzgdj9

jvlzgdj92#

下面是一个使用Linq来避免循环的简短版本...

public static string GetRadioValue(ControlCollection controls, string groupName)
{
   var selectedRadioButton = controls.OfType<RadioButton>().FirstOrDefault(rb => rb.GroupName == groupName && rb.Checked);
   return selectedRadioButton == null ? string.Empty : selectedRadioButton.Attributes["Value"];
}
gev0vcfq

gev0vcfq3#

使用LINQ:

container.Controls.OfType<RadioButton>().FirstOrDefault(r => r.GroupName == "GroupName" && r.Checked).Text;
xvw2m8pv

xvw2m8pv4#

ToString()不会给予您想要的内容:你需要的是

private string getRadioValue(ControlCollection clts, string groupName)
{
    var ret = "";
    foreach (Control ctl in clts)
    {
        if (ctl.Controls.Count != 0)
        {
            ret = getRadioValue(ctl.Controls, groupName);
        }
        if (!string.IsNullOrEmpty(ret)) {
          return ret;
        }
        var rb = ctl as RadioButton;
        if (rb != null && rb.GroupName == groupName && rb.Checked)
                return = rb.Attributes["Value"];
        }
    }
    return ret;
}
bejyjqdl

bejyjqdl5#

甚至更短的版本(在我的例子中,我需要单选按钮的文本)按钮。
您也可以将其作为HtmlGenericControl的扩展方法,例如div。

public static class HtmlGenericControlExtensions
{
    /// <summary>
    /// Gets selected value of radio button by group name.
    /// </summary>
    /// <param name="controls">Html generic control.</param>
    /// <param name="groupName">Name of the button group.</param>
    /// <returns>Selected radio button name.</returns>
    public static string GetSelectedRadioButtonName(this HtmlGenericControl control, string groupName)
        => control.Controls
            .OfType<RadioButton>()
            .FirstOrDefault(rb => rb.GroupName.Equals(groupName) && rb.Checked)?.Text ?? string.Empty;
}

相关问题