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 deASP.NET MVC Html.ValidationSummary (true) no muestra errores de modelo
MembersManager.RegisterMember(member);
segmento de retenida añade un error a la 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 deseo mostrar los 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);
}
}
Vista:
<% 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)%>
<% } %>
¿Corregieron este problema en MVC3? –
@LordCover: supongo que esto está "funcionando como se diseñó" y no es un error: la sobrecarga de ValidationSummary() utilizada por defecto excluye los errores de ModelState asociados con las propiedades del modelo en sí. Esto hace que esos errores sean representados por llamadas Html.ValidationMessageFor() para cada propiedad individual sin tenerlos duplicados en el resumen. Teniendo eso en cuenta, parece que cualquier error de modelo agregado con una clave no vacía se asume que está asociado con una propiedad del modelo, incluso si la clave no coincide con el nombre de una propiedad. –
Solo una nota para otros implementadores: 'ModelState.AddModelError (string.Empty, ex);' tampoco parece funcionar. Debe usar la sobrecarga 'ModelState.AddModelError (string, string)' como se muestra arriba. – WolfyUK