asp.net-mvc-2 - mvc - modelstate validation
ModelState.AddModelError-¿Cómo puedo agregar un error que no sea para una propiedad? (3)
Estoy revisando mi base de datos en Create(FooViewModel fvm){...}
para ver si fvm.prop1
y fvm.prop2
ya existen en esa combinación; si es así, quiero agregar un error al estado del modelo, luego devolver la vista completa. Lo intenté:
public ActionResult Create(FooViewModel fvm){
if (ThatComboAlreadyExists(fvm)) {
ModelState.AddModelError("Model", "There is already one like that");
return View(fvm);
}
}
... pero no aparece ningún error en el resumen de validación, que es donde supongo que aparecerán. Tengo la sospecha de que "Modelo" no es la clave correcta, pero no he podido encontrar nada como Google.
Eventualmente tropecé con un ejemplo del uso que estaba buscando: asignar un error al Modelo en general, en lugar de a una de sus propiedades, como de costumbre, llama:
ModelState.AddModelError(string key, string errorMessage);
pero use una cadena vacía para la clave:
ModelState.AddModelError(string.Empty, "There is something wrong with Foo.");
El mensaje de error se presentará en el <%: Html.ValidationSummary() %>
como era de esperar.
Poner la propiedad de punto del modelo en cadenas me ModelState.AddModelError("Item1.Month", "This is not a valid date");
: ModelState.AddModelError("Item1.Month", "This is not a valid date");
Puede agregar el error del modelo en cualquier propiedad de su modelo. Sugiero que no haya nada relacionado con la creación de una nueva propiedad.
Como ejemplo, verificamos si el correo electrónico ya está en uso en DB y agregamos el error a la propiedad Correo electrónico en la acción, de modo que cuando devuelvo la vista, saben que hay un error y cómo mostrarlo usando
<%: Html.ValidationSummary(true)%>
<%: Html.ValidationMessageFor(model => model.Email) %>
y
ModelState.AddModelError("Email", Resources.EmailInUse);