ASP.Net MVC 3 Recuperar valores de lista de casillas de verificación

Estoy desarrollando una aplicación web ASP.Net MVC 3 y tengo algunas dificultades para obtener los valores de una lista de verificación. Ya he leído la mayoría de las preguntas sobre Stackoverflow en esta área, sin embargo, todavía tengo algunos problemas.

Tengo un ViewModel

public class ViewModelCheckBox
{
    public string Id { get; set; }
    public string Name { get; set; }
    public bool Checked { get; set; }
}

Otro ViewModel que usa el modelo de vista arriba

public class ViewModelAssignSubSpeciality
{
    public ListItem Item { get; set; }
    public IList<ViewModelCheckBox> SpecialityList { get; set; }
}

Entonces en mi controlador

public ActionResult AssignSubSpeciality(int id)
{
        //Get a list of all sub-specialities
        var SpecialityList = _listService.GetListItemsByID(3).ToList();

        //Get a list of sub-specialities for the the passed in id, this is either the id of a speciality or grade
        IList<RelationshipSpecialitySub> assignedSpecialities = _listService.GetAssignedSubSpecialities(id).ToList();

        var checkBoxList = new List<ViewModelCheckBox>();

        foreach (ListItem item in SpecialityList)
        {
            ViewModelCheckBox chkBox = new ViewModelCheckBox { Id = item.listItemID.ToString(), Name = item.description };

            //If sub-speciality exists in assignedSpecialities list, then make checkbox checked
            foreach (var specilaity in assignedSpecialities)
            {
                if (specilaity.subID == item.listItemID)
                {
                    chkBox.Checked = true;
                }
                else
                {
                    chkBox.Checked = false;
                }
            }

            checkBoxList.Add(chkBox);
        }

        ViewModelAssignSubSpeciality viewModel = new ViewModelAssignSubSpeciality();
        viewModel.ListItem = _listService.GetListItemByID(id);
        viewModel.SpecialityList = checkBoxList;

        return View(viewModel);
    }

El código en el controlador anterior es obtener una lista de todos los elementos posibles de la lista de casillas de verificación, y luego obtener una lista de todos los elementos de la lista de casilla de verificación seleccionados previamente para los que establece la opción marcada en verdadero.

My View entonces se ve así, recorriendo la SpecialityList y creando una casilla de verificación para cada elemento, y también configurando su valor seleccionado como verdadero si es necesario.

<fieldset>
<legend>Specialities</legend>

@foreach (var item in Model.SpecialityList)
{
<input type="checkbox" id="@item.Id" name="@item.Name" value="@item.Id" @(item.Checked ? "checked" : "") />
<label for="@item.Id">@item.Name</label><br />
}

<input type="submit" value="Save Changes" class="sepH_b" />                                         

Mi método HttpPost en mi controlador se ve así

    public ActionResult AssignSubSpeciality(ViewModelAssignSubSpeciality model)
    {
        //delete all sub-specialities in tbl relationshipSpecialitySub for List
        foreach (ViewModelCheckBox item in model.SpecialityList)
        {
                //_listService.DeleteSubSpecialityFromSpeciality(item.Id);
        }

        return RedirectToAction("ListItems", new { id = model.ListItem.listID });
    }

Sin embargo, cuando intento obtener las casillas seleccionadas en

model.SpecialityList

Siempre somos nulos. No estoy seguro de por qué no contiene una lista de ViewModelCheckBox.

¿Puede alguien ayudarme con esto?

Gracias

Respuestas a la pregunta(6)

Su respuesta a la pregunta