c# - solo - MVC Razor Validation Se muestran errores en la carga de la página cuando no se han publicado datos
validar campos formulario mvc (4)
Estoy jugando con anotaciones de datos. Cuando hago clic en un enlace para ir a una página, se muestran los mensajes de validación, pero me gustaría que los mensajes de validación no se muestren a menos que se hayan publicado los datos.
Ver:
@Html.TextBoxFor(m => m.EmailAddress, new { @placeholder = "Enter Email", @class = "form-control" })
@Html.ValidationSummary(true, "Registration Failed. Check your credentials")
@Html.ValidationMessageFor(m => m.EmailAddress, "You must enter a valid Email Address.")
Modelo:
[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress]
[Display(Name = "Email Address: ")]
public string EmailAddress { get; set; }
Controlador:
[HttpGet]
public ActionResult AddUser()
{
return View();
}
[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
if (ModelState.IsValid)
{
var success = UserRepository.AddUser(user);
if (success)
{
return View("Success");
}
}
return View("AddUser");
}
Como dije, mi problema ocurre en la carga de la página de la vista AddUser. Cuando hago clic en el enlace para ver la página AddUser, los mensajes de validación se muestran después de que se cargan, pero en este momento no se han publicado datos y el modelo está vacío.
Establezca el estilo de validación a:
.validation-summary-valid { display:none; }
Por lo tanto, está oculto por defecto. Un error activará su visualización.
Puede borrar el estado del modelo después de vincular al usuario:
ModelState.Clear();
Esto sucede porque ModelBinder
configurará ModelState
en el enlace. En cada acción que vincula un modelo y devuelve una vista con el mismo modelo, tendrá este problema.
[HttpPost]
public ActionResult AddUser(UserCreateViewModel user)
{
if (ModelState.IsValid)
{
var success = UserRepository.AddUser(user);
if (success)
{
return View("Success");
}
}
ModelState.Clear(); // <-------
return View("AddUser");
}
$(''.field-validation-error'').html("");
.field-validation-valid {
display: none;
}
Cada vez que la validación se desencadena en la carga de la página, este valor ".field-validation-valid" se agrega automáticamente al atributo de clase del elemento de entrada desencadenado.
Al agregar CSS para mostrar ninguno como el valor de esa clase en particular, ya no verá los mensajes de validación en la carga de la página inicial.
Los mensajes de validación todavía se mostrarán normalmente después de que se haya tocado el elemento de entrada particular.