Estoy tratando de usar la validación del modelo en MVC .Net Core y no puedo reemplazar este mensaje de error predeterminado "El valor '' no es válido".
En teoría, podemos reemplazar nuestro propio mensaje de error personalizado usando la anotación ErrorMessage
en el modelo. Pero no pude encontrar una manera de hacer que esto funcione.
Mi modelo
[Required(ErrorMessage = "Date Required")] [DataType(DataType.Date, ErrorMessage = "Invalid Date Format")] [Display(Name = "Appointment Date")] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime AppointmentDate { get; set; }
Puse un mensaje de ErrorMessage
diferente para la etiqueta Required
y Tipo de DataType
como se muestra arriba.
Mi vista html
<div class="col-md-2"> <input class="form-control" asp-for="AppointmentDate"> <span asp-validation-for="AppointmentDate" class="text-danger"></span> </div>
¿Podría por favor ayudarme a reemplazar ese mensaje de error? Gracias.
Para que su atributo Required
funcione, debe hacer que el campo sea anulable:
public DateTime? AppointmentDate { get; set; }
Editar : también tenga en cuenta que el atributo DataType
en realidad no realiza la validación en el campo. Fecha de validación de MVC al aplicar el enlace de los datos post
al model
Después de que cambió el sistema de validación de .NET Core 3. Los parámetros que no aceptan valores NULL se tratan como si tuvieran un atributo [Obligatorio]. Obtiene la validación del lado del cliente incluso si no aplica el atributo [Requerido]. La validación JQuery del lado del cliente acepta campos de cadenas vacías, pero una vez enviado al servidor, el mismo campo obtendrá un resultado no válido. The value '' is invalid
es el mensaje de error predeterminado para la validación del lado del servidor. De acuerdo con los documentos de asp.net, al usar un atributo [Requerido] puede anular este mensaje, pero no se aplica a los campos vacíos. Desafortunadamente, esta función genera valores de cadena vacíos ("") para campos de entrada ocultos que hacen referencia a propiedades int no anulables (es decir @Html.Hiddenfor(m=>m.id)
generaría "" para el elemento html). las opciones provistas en asp.net docs la más segura es hacer que la propiedad sea anulable. otra buena opción es cambiar el mensaje predeterminado de .NET a otra cosa
services.AddRazorPages() .AddMvcOptions(options => { options.ModelBindingMessageProvider.SetValueMustNotBeNullAccessor( _ => "The field is required."); });
Puedes leer más sobre esto aquí .
Tiene el mismo problema pero no puede detectar el problema. Revisé el objeto en modo de depuración para ver si hay alguna forma de ver qué propiedad falla en el estado del modelo.
Luego veo el modelo que falla. Ese es un valor booleano que se asigna a una casilla de verificación
¡La parte extraña es "este no es un campo obligatorio"!
Agregué un signo de interrogación y usé el método getvalueordefault cuando lo usé
public bool? IsCorporateAccount { get; set; }