nick gowdy
nick gowdy

Reputation: 6511

Using a list with MVC radiobuttonfor

I am using radiobuttonfor in MVC 4 and I am trying to give the user a selection of items that he can select. My problem is when one of the items is selected and it's posted to the controller, the string value is a .net system.guid rather than the actual guid value.

  @foreach (var person in Model.InterviewDates[i].Interviewers) // all interviewers - not filtered
  {
      var list =  Model.InterviewDates[i].Interviewers.Select(p => p.InterviewerID).ToList();

      @Html.Raw(person.InterviewerName + " ")
      // TODO: Lambda for getting all Chairs based on interview type and interview date
      @Html.RadioButtonFor(m => m.InterviewSchedules[i].Chair, list, new { @style = "width:auto;background:none;border:none" })
      <br />
  }

I have a list of people and it contains their user ids. I then want the user to select a radio button to bind that value to the model.

-       list    Count = 3   System.Collections.Generic.List<System.Guid>
+       [0] {5fb7097c-335c-4d07-b4fd-000004e2d221}  System.Guid
+       [1] {5fb7097c-335c-4d07-b4fd-000004e2d222}  System.Guid
+       [2] {5fb7097c-335c-4d07-b4fd-000004e2d223}  System.Guid
+       Raw View        

When I post it goes here:

 [HttpPost]
 public ActionResult SubmittedInterviews(InterviewManagement InterviewManagement)
 {
     return View();
 }

This is what I can see in quick watch

-       InterviewManagement {IMecheAdmin.Models.InterviewManagement}    IMecheAdmin.Models.InterviewManagement
+       InterviewDates  Count = 0   System.Collections.Generic.List<IMecheAdmin.Models.InterviewDate>
-       InterviewSchedules  Count = 1   System.Collections.Generic.List<IMecheAdmin.Models.InterviewSchedule>
-       [0] {IMecheAdmin.Models.InterviewSchedule}  IMecheAdmin.Models.InterviewSchedule
        Chair   "System.Collections.Generic.List`1[System.Guid]"    string
        Cofacilitator   null    string
        Facilitator null    string
+       InterviewDate   {01/01/0001 00:00:00}   System.DateTime
        Location    null    string
        Observer    null    string
        Preference  false   bool
        Site    null    string
+       Raw View        
+       InterviewTypes  Count = 0   System.Collections.Generic.List<IMecheAdmin.Models.InterviewType>
        SelectedMembershipType  null    string

And this is not what I want:

Chair   "System.Collections.Generic.List`1[System.Guid]"    string

Doesn't say actual GUID. Any ideas?

Upvotes: 0

Views: 2994

Answers (1)

Ehsan Sajjad
Ehsan Sajjad

Reputation: 62488

Radio button is normally used where we want user to only select only one option from the provided item.

So, you need to pass single object instead of list:

foreach(var item in list)
{

    @Html.RadioButtonFor(m => m.InterviewSchedules[i].Chair, 
                         item.InterviewerID, 
                         new { @style = "width:auto;background:none;border:none" })
}

Upvotes: 2

Related Questions