如何查找选中的单选按钮使用组名我的代码是否附加?

时间:2013-05-30 09:05:54

标签: c# asp.net .net radio-button web-controls

我试图使用组名找到已检查无线电的值我有返回它的方法,但我应该在该方法中传递什么以及组名

方法在这里,

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是无线电组但在单选按钮上收到错误“无效参数”我通过了吗?

希望提前感谢您的建议

4 个答案:

答案 0 :(得分:4)

这是因为您正在传递RadioButton。您的方法接受ControlCollection,而不是Control

为什么不传递this.Controls传递页面的整个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;
    }

答案 1 :(得分:3)

这是使用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"];
}

答案 2 :(得分:1)

使用LINQ:

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

答案 3 :(得分:0)

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;
}