asp.net-mvc - mvc - razor reference
ASP.NET MVC: no se puede vincular la matriz para ver el modelo (3)
Tengo un modelo de vista con un de 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.
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>
El formulario se está procesando correctamente, he marcado la fuente y cada casilla de verificación de salida tiene un número diferente para sus campos de id. Y nombre.
<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; }
}
El problema que tengo es que cuando el formulario se publica, la matriz ChosenTestCollectionIds devuelve nulo. ¿Qué estoy haciendo mal aquí?
RESPONDER
He resuelto cómo hacerlo:
<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" />
Establezca el nombre de los tipos de entrada para que todos sean iguales. También puede crear una carpeta de modelo personalizada si está intentando vincular un modelo más complejo que solo una lista. Aquí hay un excelente artículo sobre las diferentes formas de vincular a sus modelos
Siempre vuelvo a la publicación de Phil Haack sobre el modelo que vincula una lista. Además, siempre defino mi propio índice porque mi usuario alterará la lista en el lado del cliente y luego publicará los cambios.
http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
<input type="checkbox" id="[@i]" name="ChosenTestCollectionIds" value="@testCollection.Id" />