Luché con esto por un tiempo hoy, y esto no es estrictamente la validación del cliente, ya que requiere un viaje redondo, pero le permite beneficiarse del resumen de validación y ayudantes de mensajes en la plantilla estándar. Dentro de su método de acción del controlador simplemente envuelva su llamada SaveChanges()
en un intento - captura y agrega los errores resultantes de la ModelState
de la siguiente manera:
try {
//This does not pick up fluent validation failures
if (ModelState.IsValid) {
db.Entity.Add(entity);
db.SaveChanges();
//Users want to create loads of my entities without seeing the index...
return RedirectToAction("Create");
}
} catch (DbEntityValidationException e) {
//Log errors
foreach (var result in e.EntityValidationErrors) {
foreach(var error in result.ValidationErrors){
ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
}
}
}
//return to view with current model + validation errors
return View(entity)
Por supuesto, esto requiere un poco más de trabajo si va a guardar múltiples entidades aquí .
Por supuesto, el uso de un modelo de objetos Ver como Ladislav sugiere que sería el enfoque correcto, sin embargo he utilizado esto para soportar una interfaz de usuario de prueba solicitada por abajo las pruebas de integración de sistemas antes de lo previsto ...
¿Por qué EF siquiera necesita mapeos como "HasMaxLength"? Si el valor es más largo, SQL Server lo rechazará si se intenta la escritura, y no importa en las lecturas ya que el tipo 'string' no tiene una limitación de longitud. Entonces, ¿para qué sirve este mapeo? –
Sé que esta es una vieja pregunta, pero pensé que agregaría para futuros lectores. Una razón es si usa primero el código para luego crear la base de datos, las anotaciones api/data fluidas se usan para construir las declaraciones de la tabla de creación, donde necesita saber la longitud deseada, y así sucesivamente. – Kate