Buenas tardes a todos Tengo una pregunta sobre la validación de los valores de la lista desplegable. Tengo una vista que está vinculada a un tipo de modelo de vista llamado ReservationData
.ASP.NET MVC 3 - Pregunta de validación
Este objeto contiene una propiedad CustomerVehicles
de tipo List<VehicleData>
. VehicleData
tiene dos int
propiedades VehicleMakeId
y VehicleModelId
.
En mi opinión, estoy tratando de recorrer el número de elementos en la colección CustomerVehicles
y mostrar dos listas desplegables para cada uno, un menú desplegable de vehículo y un modelo de vehículo usando DropDownListFor
.
Cuando intento enviar y validar, no veo ningún error de validación en la pantalla.
Por si acaso te estás preguntando he agregado un ValidationMessageFor
para cada menú desplegable también. No estoy seguro de si esto es un problema con la estructura de mi modelo de vista y su complejidad, y cómo deben nombrarse los controles o cómo deben establecerse los identificadores. Cualquier ayuda sería muy apreciada.
Aquí está el código para el bucle sobre la colección:
@for (var i = 0; i < Model.CustomerVehicles.Count(); i++)
{
var vehicleNumber = i + 1;
<div class="vehicle-selection-wrapper">
<div class="content-container">
<h3>
Vehicle @vehicleNumber</h3>
<img class="vehicle-image" alt="manufacturer image" src="@Url.Content("~/Content/images/default-vehicle.gif")" /><br />
@Html.LabelFor(m => m.CustomerVehicles[i].VehicleMakeId)
@Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleMakeId
, new SelectList(Model.VehicleMakes, "Id", "Name")
, @UIDisplay.Dropdown_DefaultOption, new { @class = "long-field" })<br />
@Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleMakeId)<br />
@Html.LabelFor(m => m.CustomerVehicles[i].VehicleModelId)
@Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleModelId
, new SelectList(new List<CWR.Domain.VehicleModel>(), "Id", "Name")
, @UIDisplay.Dropdown_DefaultOption, new { @class = "long-field" })
@Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleModelId)
</div>
</div>
}
Ok por lo que también me di cuenta de que en el HTML generado que seleccione el que se generan faltan los atributos de datos-val HTML5 que están asociados a los elementos para manejar la validación Aquí está el código HTML generado
<select class="long-field" id="CustomerVehicles_0__VehicleMakeId" name="CustomerVehicles[0].VehicleMakeId"><option value="">-- Select --</option>
</select><br />
<span class="field-validation-valid" data-valmsg- for="CustomerVehicles[0].VehicleMakeId" data-valmsg-replace="true"></span><br />
<label for="CustomerVehicles_0__VehicleModelId">Model</label>
<select class="long-field" id="CustomerVehicles_0__VehicleModelId" name="CustomerVehicles[0].VehicleModelId"><option value="">-- Select --</option>
</select>
<span class="field-validation-valid" data-valmsg-for="CustomerVehicles[0].VehicleModelId" data-valmsg-replace="true"></span>
Además en mi clase VehicleData
los VehicleMakeId
y VehicleModelId
propiedades están decoradas con un atributo Required
.
ACTUALIZACIÓN:
Ok, así que estaba poniendo a prueba y se dio cuenta de que si sigo mi código idéntico, excepto que intercambiar las llamadas con Html.DropdownListFor
Html.TextboxFor
llamadas luego las obras de validación. ¿Qué podría estar causando esto? ¿Podría ser un error de marco con la validación discreta?
ACTUALIZACIÓN: contenga la reparación
Así que después de la publicación de esta misma pregunta en el ASP.NET Forums, yo era capaz de conseguir una solución. En la publicación, podrá ver que hay un error en el marco de validación discreto y cómo maneja la validación de las listas desplegables. El usuario counsellorben hace un buen trabajo al explicar el problema, así como una solución (incluido un código de muestra) que ayudará a otros a evitar este problema en el futuro, o al menos hasta que Microsoft cree una solución para el marco.
Gracias a todos por su ayuda.
¿Tiene un ejemplo de cómo usar este Ayudante personalizado dentro de una vista? Gracias. – Brandon