2011-10-03 21 views
24

Tengo un modelo de vista con una desde que incluye un conjunto de casillas de verificación. Necesito las casillas de verificación para asignar a una matriz cuando se vincula en el método de devolución de mi controlador.ASP.NET MVC - No se puede vincular una matriz para ver el modelo

Aquí está el modelo de vista.

@model TMDM.Models.TestSeriesCreateViewModel 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create a Test Series</h2> 


@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Title) 
      @Html.ValidationMessageFor(model => model.Title) 
     </div> 

     <h3>Which Test Collections are in this Test Series?</h3> 
     <div class="editor-field"> 
     @{ 
      var i = 0; 
      foreach (var testCollection in Model.TestCollections) 
      { 
       <input type="checkbox" id="ChosenTestCollectionIds[@i]" name="ChosenTestCollectionIds[@i]" value="@testCollection.Id" /> 
       <span>@testCollection.Title</span> 
       <br /> 
       i++; 
      } 
     } 
     </div> 

     <p> 
      <input type="submit" value="Save" class="medium green awesome" /> 
      @Html.ActionLink("Cancel", "Index", "TestSeries", null, new { @class = "medium black awesome" }) 
     </p> 
    </fieldset> 

La forma está rindiendo bien, he comprobado la fuente y cada casilla de salida tiene un número diferente de sus campos id y name.

<input type="checkbox" id="ChosenTestCollectionIds[0]" name="ChosenTestCollectionIds[0]" value="5" /> 
<input type="checkbox" id="ChosenTestCollectionIds[1]" name="ChosenTestCollectionIds[1]" value="6" /> 
//etc... 

Aquí está el modelo de vista.

public class TestSeriesModel 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
} 

public class TestSeriesCreateViewModel : TestSeriesModel 
{ 
    public List<ITestCollectionDataObject> TestCollections { get; set; } 
    public int[] ChosenTestCollectionIds { get; set; } 
} 

problema que estoy teniendo es que cuando los mensajes formulario de vuelta la matriz ChosenTestCollectionIds vuelve nula. ¿Qué estoy haciendo mal aquí?

RESPUESTA

he trabajado la manera de hacerlo:

<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" /> 
+1

Hola. Puede que te ayude más en un par de horas, pero mientras tanto quieres que todas las casillas de verificación tengan el mismo atributo de "nombre" y diferente "id". Inténtalo y ve si funciona. –

+0

@payntbrush: Perfecto. +1 por vencerme por 2. –

Respuesta

14
<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" /> 
0

Establecer el nombre de los tipos de entrada a ser todos iguales. También puede crear una carpeta de modelo personalizada si está intentando vincular un modelo más complejo que solo una lista. Este es un excelente artículo sobre las diferentes maneras de obligar a sus modelos

Various Model Binding techniques

Cuestiones relacionadas