3

グループ名を使用してチェック済みラジオの値を見つけようとしています。それを返すメソッドがありますが、グループ名とともにそのメソッドに何を渡す必要がありますか

メソッドはこちら、

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

4 に答える 4

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;
    }
于 2013-05-30T09:22:29.973 に答える
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"];
}
于 2015-05-22T14:47:59.357 に答える