Tengo algún problema con Html.ValidationSummary. No quiero mostrar errores de propiedad en ValidationSummary. Y cuando configuro Html.ValidationSummary (true) no muestra mensajes de error de ModelState. Cuando hay alguna excepción en la acción del controlador en la cadena
MembersManager.RegisterMember(member);
la sección catch agrega un error a ModelState:
ModelState.AddModelError("error", ex.Message);
Pero ValidationSummary no muestra este mensaje de error. Cuando configuro Html.ValidationSummary (false) se muestran todos los mensajes, pero no quiero mostrar errores de propiedad. ¿Como puedo solucionar este problema?
Aquí está el código que estoy usando:
Modelo:
public class Member
{
[Required(ErrorMessage = "*")]
[DisplayName("Login:")]
public string Login { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Password:")]
public string Password { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Confirm Password:")]
public string ConfirmPassword { get; set; }
}
Controlador:
[HttpPost]
public ActionResult Register(Member member)
{
try
{
if (!ModelState.IsValid)
return View();
MembersManager.RegisterMember(member);
}
catch (Exception ex)
{
ModelState.AddModelError("error", ex.Message);
return View(member);
}
}
Ver:
<% using (Html.BeginForm("Register", "Members", FormMethod.Post,
new { enctype = "multipart/form-data" })) {%>
<p>
<%= Html.LabelFor(model => model.Login)%>
<%= Html.TextBoxFor(model => model.Login)%>
<%= Html.ValidationMessageFor(model => model.Login)%>
</p>
<p>
<%= Html.LabelFor(model => model.Password)%>
<%= Html.PasswordFor(model => model.Password)%>
<%= Html.ValidationMessageFor(model => model.Password)%>
</p>
<p>
<%= Html.LabelFor(model => model.ConfirmPassword)%>
<%= Html.PasswordFor(model => model.ConfirmPassword)%>
<%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
</p>
<div>
<input type="submit" value="Create" />
</div>
<%= Html.ValidationSummary(true)%>
<% } %>
ModelState.AddModelError(string.Empty, ex);
tampoco parece funcionar. Debe usar laModelState.AddModelError(string, string)
sobrecarga como se muestra arriba.Esto funciona mejor, ya que puede mostrar validationMessage para una clave específica:
y mostrarlo así:
fuente
Sé que esto es algo antiguo y se ha marcado como respuestas con 147 votos, pero hay algo más que considerar.
Puede tener todos los errores del modelo, la propiedad nombrada y la cadena. Las claves vacías por igual, se mostrarán en ValidationSummary si es necesario. Hay una sobrecarga en ValidationSummary que hará esto.
fuente
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
a@Html.ValidationSummary(false, "", new { @class = "text-danger" })
Tal vez así:
Y en la pantalla agregue:
O
fuente
Usar esta línea puede ser útil
fuente
En mi caso no estaba funcionando debido a la devolución.
En lugar de usar:
Solía:
Es un modelo, por lo que es obvio que
ModelState.AddModelError("keyName","Message");
debe funcionar con un modelo.Esta respuesta muestra por qué. Agregar validación con DataAnnotations
fuente
Si casi todo parece correcto, otra cosa a tener en cuenta es asegurarse de que el resumen de validación no se oculte explícitamente mediante alguna anulación de CSS como esta:
Esto también puede hacer
@Html.ValidationSummary
que aparezca oculto, ya que el resumen se representa dinámicamente con lavalidation-summary-valid
clase.fuente
Puedes probar,
fuente
AGREGAR en la parte inferior de su vista:
fuente