web-dev-qa-db-fra.com

Validation de modèle MVC .Net Core - La valeur '' n'est pas valide. Erreur

J'essaie d'utiliser la validation de modèle dans MVC .Net Core et ne parviens pas à remplacer le message d'erreur par défaut "La valeur" n'est pas valide ".

En théorie, nous pouvons remplacer notre propre message d'erreur personnalisé en utilisant l'annotation ErrorMessage dans le modèle. Mais je ne pouvais pas trouver un moyen de faire fonctionner celui-ci.

Mon modele

[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; }

Je mets différent ErrorMessage pour les balises Required et DataType comme indiqué ci-dessus.

Ma vue HTML

    <div class="col-md-2">
        <input class="form-control" asp-for="AppointmentDate">
        <span asp-validation-for="AppointmentDate" class="text-danger"></span>
    </div>

 enter image description here

Pourriez-vous s'il vous plaît m'aider comment je pourrais obtenir ce message d'erreur remplacé? Merci.

13
TTCG

Pour que votre attribut Required fonctionne, vous devez rendre le champ nullable:

public DateTime? AppointmentDate { get; set; }

Edit : Notez également que l'attribut DataType n'effectue pas de validation sur le champ. Date de validation MVC lors de l'application d'une liaison de post données à model

13
Denis Krasakov

Mon problème était que dans l'action Créer, je retournais la vue sans créer une nouvelle entité, ce qui, lorsque j'ai changé cela, c'est-à-dire que Return View(new MyEntity()); a résolu le problème

0
Michael Tranchida

Avoir le même problème mais ne peut pas détecter le problème. J'ai vérifié l'objet en mode débogage pour voir s'il existait un moyen de voir quelle propriété échouait à l'état du modèle.

 Debug mode view of the modelstate object

Ensuite, je vois quel modèle échoue . C'est une valeur booléenne qui correspond à une case à cocher 

La partie étrange est "ceci n'est pas un champ obligatoire"!

J'ai ajouté un point d'interrogation et utilisé la méthode getvalueordefault lors de son utilisation

public bool? IsCorporateAccount { get; set; }
0
Ozan BAYRAM