returns name c# asp.net-mvc asp.net-mvc-5 compare-attribute

c# - name - El atributo ErrorMessage personalizado para comparar no funciona



summary documentation c# (4)

Creo que esto es un error. (Edit: Lo es.) También puedo reproducir esto. De hecho, el comportamiento es exactamente el mismo con la validación del lado del cliente activada. Si observa el HTML generado, verá que ni siquiera genera la cadena de error personalizada, siempre emite la predeterminada.

En realidad, solo he tenido una búsqueda para encontrar más información y he encontrado que se ha enviado como un error en Codeplex. Se informó hace 8 días y alguien ha sido asignado a él. Puedes encontrar el informe de errores here .

Pasos para reproducir:

  1. Cree un nuevo proyecto MVC 5 con cuentas de usuario individuales.
  2. Mire el ErrorMessage especificado en RegisterViewModel para la propiedad ConfirmPassword . Es "La contraseña y la contraseña de confirmación no coinciden".
  3. Genere y ejecute la aplicación e intente registrarse con contraseñas no coincidentes. Veré el mensaje de error "''Confirmar contraseña'' y ''Contraseña'' no coinciden", en lugar de la especificada en el modelo.

Parece que una propiedad personalizada ErrorMessage en el atributo Compare no funciona. Incluso si especifico un ErrorMessage, la validación todavía muestra algún tipo de mensaje predeterminado en su lugar.

Esto funciona con System.Web.Mvc.CompareAttribute , pero ahora está en desuso y en su lugar debe usar System.ComponentModel.DataAnnotations.CompareAttribute , que muestra este problema.

Agrego el atributo Compare a una propiedad y especifico el ErrorMessage siguiente manera:

[Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match. I''ll even add some random text!")] public string ConfirmPassword { get; set; }

El resultado esperado sería ( pero esto no es lo que obtengo ):

En su lugar, recibo este mensaje de error "predeterminado":

La validación del lado del cliente está deshabilitada. ¿Me estoy perdiendo de algo? Este ejemplo se toma de la plantilla MVC 5 con cuentas de usuario individuales como autenticación.



Tengo el mismo problema, solución:

Cambio:

[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]

A:

[System.Web.Mvc.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]

¡Esta funcionando!


Utilice System.ComponentModel.DataAnnotations.Compare en su lugar. Dado que System.Web.Mvc.Compare está obsoleto, el atributo de comparación anterior realiza el mismo trabajo.