Come Trovare Controllato Radio Pulsante con il nome del Gruppo il Mio codice è Collegato?

sto cercando di trovare il valore del bagaglio radio utilizzando il nome del gruppo che ho metodo di restituirlo ma che cosa devo passare, in questo metodo, insieme con il nome del gruppo

metodo è qui,

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

io la uso come

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

dove Aps è la radio del gruppo, ma sempre errore “argomento non valido” su radio button i pass ??

speranze per il tuo suggerimento, grazie in anticipo

InformationsquelleAutor tester Joe | 2013-05-30

 

4 Replies
  1. 4

    Questo è perché si sta passando RadioButton. Il metodo accetta ControlCollection, non Control.

    Perché non passare questo.Controlli per passare l’intera ControlCollection della pagina? O qualsiasi altro ControlCollection che potrebbe essere utilizzato per tenere che RadioButton si desidera controllare?

    Ecco un esempio:

        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;
        }
    • io sono sempre null in cambio ???
    • hai provato a fare un debug? 🙂
  2. 3

    Ecco una versione più breve, utilizzando Linq per evitare il loop…

    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"];
    }
    • Appena trovato una risposta simile da SLaks su una domanda simile… stackoverflow.com/questions/1797907/…
    • La “risposta simile” di cui sopra si riferisce a WinForms – questo è un WebForms domanda.
  3. 1

    Utilizzare LINQ:

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

    Il metodo ToString() non ha intenzione di dare ciò che vuoi: Hai bisogno di qualcosa di più come

    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;
    }
    • beh, il metodo ToString() continuerà a funzionare anche se non è una buona pratica. Non credo che questa sia la risposta però.
    • che cosa devo passare per “ControlCollection clt” ?
    • Hai provato this.Controls
    • OK non avevo controllato RadioButton.ToString() riprodotto solo il nome della classe, tuttavia, se un’eredità di controllo è stata utilizzata utilizzata una diversa implementazione del metodo ToString quindi la mia risposta sarebbe ancora lavoro
    • sì, in effetti. Ma quello che voglio dire è… che non è la risposta al manifesto della domanda.
    • codice mi restituisce null ???
    • Indovinare il valore per l’attributo trovato il pulsante è nullo o è stato annullato.
    • se voglio ottenere l’id della radio quindi vorrei sostituire [“Value”] da [“Id”] ?
    • sia rb.ID se si desidera che il lato server id o rb.ClientID se si desidera che il lato client id
    • ho fatto lo stesso, Grazie

Lascia un commento