Estoy revisando mi base de datos en Create(FooViewModel fvm){...}
para ver si el fvm.prop1
y fvm.prop2
ya existen en esa combinación; si es así, deseo agregar un error al 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 se muestran errores en el Html.ValidationSummary
, que es donde supongo que aparecerían. Tengo la sospecha de que "Modelo" no es la clave correcta, pero no he podido encontrar nada a la Google.
asp.net-mvc-2
asp.net-mvc-2-validation
modelstate
Scott Baker
fuente
fuente
Respuestas:
Eventualmente me topé con un ejemplo del uso que estaba buscando: asignar un error al Modelo en general, en lugar de una de sus propiedades, como de costumbre llama:
pero use una cadena vacía para la clave:
El mensaje de error se presentará en la
<%: Html.ValidationSummary() %>
forma esperada.fuente
ModelState.AddError(errorMessage)
oModelState.AddGlobalError(errorMessage)
... sería intuitivo y más fácil descubrir cómo agregar un mensaje de error no relacionado con las propiedades de ningún modelo.@Html.ValidationMessage(string.Empty)
ValidationSummaryErrors(bool excludePropertyErrors)
sobrecarga mostrará todos los errores de validación si su argumento es falso o solo errores no específicos de la propiedad (clave = "") si su argumento es verdadero.Puede agregar el error de modelo en cualquier propiedad de su modelo, sugiero que si no hay 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 para que cuando regrese la vista, sepan que hay un error y cómo mostrarlo usando
y
fuente
(m=>m.email).SomeMagicToString()
?nameof
operador que viene en C # 6.0 resuelve este problema de cadena mágica. msdn.microsoft.com/en-us/magazine/dn802602.aspxPoner la propiedad del punto modelo en cadenas funcionó para mí:
ModelState.AddModelError("Item1.Month", "This is not a valid date");
fuente