RadioButtonFor not returning the Selected Value

757 Views Asked by At

So, I'm trying to figure out how to return the selected value of a RadioButtonFor. Should be simple, but I'm missing something.

In the view I have:

@for (int i = 0; i < Model.ProfessionalRelations.Count; i++)
{
    @Html.RadioButtonFor(m => m.SelectedProfessionalRelations, Model.ProfessionalRelations, new { id = "professionalRelations_" + i})
    @Html.HiddenFor(m => m.ProfessionalRelations[i].Text)
    @Html.Raw("<span style=\"padding-left: 5px; \">");
    @Html.DisplayFor(m => m.ProfessionalRelations[i].Text)
    @Html.Raw("</span><br />")
}

In the controller, I have the following:

rvm.ProfessionalRelations = new List<RadioButton>();
rvm.ProfessionalRelations.AddRange(AccountHelper.professionalRelations(rvm.SelectedProfessionalRelations));

In the AccountHelper, here's what I have:

public static List<RadioButton> professionalRelations(string selectedText)
{
    var pr = new List<RadioButton>()
    {
        new RadioButton {Text = "None", ToolTip = "None", Checked = selectedText == "None"},
        new RadioButton {Text = "Orthotic/Prosthetic Practitioner", ToolTip = "Orthotic/Prosthetic Practitioner", Checked = selectedText == "Orthotic/Prosthetic Practitioner"},
        new RadioButton {Text = "Orthotic/Prosthetic Resident", ToolTip = "Orthotic/Prosthetic Resident", Checked = selectedText == "Orthotic/Prosthetic Resident"},
        new RadioButton {Text = "Orthotic/Prosthetic Student", ToolTip = "Orthotic/Prosthetic Student", Checked = selectedText == "Orthotic/Prosthetic Student"},
        new RadioButton {Text = "O&P Technician (including Students)", ToolTip = "O&P Technician (including Students)", Checked = selectedText == "O&P Technician (including Students)"},
        new RadioButton {Text = "Non-Clinical Employee of an O&P practice", ToolTip = "Non-Clinical Employee of an O&P practice", Checked = selectedText == "Non-Clinical Employee of an O&P practice"},
        new RadioButton {Text = "Employee of an O&P Manfacturer/Distributor or other related company", ToolTip = "Employee of an O&P Manfacturer/Distributor or other related company", Checked = selectedText == "Employee of an O&P Manfacturer/Distributor or other related company"},
        new RadioButton {Text = "HealthCare Professional (non O&P)", ToolTip = "HealthCare Professional (non O&P)", Checked = selectedText == "HealthCare Professional (non O&P)"},
        new RadioButton {Text = "Other", ToolTip = "Other", Checked = selectedText == "Other"}
    };
    return pr;
}

When I post:

rvm.ProfessionalRelations = new List<RadioButton>();
rvm.ProfessionalRelations.AddRange(AccountHelper.professionalRelations(rvm.SelectedProfessionalRelations));

But, for some reason the rvm.SelectedProfessionalRelations returns back as "System.Collections.Generic.List`1[System.Web.UI.WebControls.RadioButton]"

I should add that when your go the page, I have the following:

rvm.ProfessionalRelations = new List<RadioButton>();
rvm.ProfessionalRelations.AddRange(AccountHelper.professionalRelations("None"));

But nothing is selected.

I've tried changing the RadioButtonFor to be

@Html.RadioButtonFor(m => m.SelectedProfessionalRelations, Model.ProfessionalRelations, new { id = "professionalRelations_" + i, @checked = Model.ProfessionalRelations[i].Checked})

But that still doesn't select anything (either when you go to the page or post).

While running in debug mode, I checked the AccountHelper and it shows that "None" is checked but it doesn't reflect that.

Any help would be greatly appreciated!

2

There are 2 best solutions below

0
Win On

RadioButtonFor's third parameter is an object which we normally pass string argument.

@for (int i = 0; i < Model.ProfessionalRelations.Count; i++)
{
    @Html.RadioButtonFor(m => m.SelectedProfessionalRelation, 
         Model.ProfessionalRelations[i].Text) 
    Model.ProfessionalRelations[i].Text
}

Your model class should be the following with SelectedProfessionalRelation property as singular (not plural), because radio button only returns a single selected value.

public class YourModel
{
   ...
   public string SelectedProfessionalRelation { get; set; }
   ...
}
1
AJ Tatum On

Figured it out. I changed List to List.

Then in the View I have:

@foreach (var pr in Model.ProfessionalRelations)
{
    @Html.RadioButtonFor(m => m.SelectedProfessionalRelations, pr, new { id = pr.Replace("/",string.Empty).Replace(" ",string.Empty) })
    @Html.Raw("<span style=\"padding-left: 5px;\">")
    @Html.LabelFor(m=>m.ProfessionalRelations, pr, new {@for = pr.Replace("/", string.Empty).Replace(" ", string.Empty) })
    @Html.Raw("</span>")

    if (pr == "Other")
    {
        <span style="padding-left: 10px;">@Html.TextBox("Other")</span>
    }
    @Html.Raw("<br />")
}

I had to do the string.Replace as the values sometimes contained slashes and whatnow.