Maison >développement back-end >C++ >Comment implémenter la validation conditionnelle dans ASP.NET MVC à l'aide des annotations de données et de IValidatableObject ?
IValidatableObject
La fonctionnalité de validation conditionnelle d'ASP.NET MVC vous permet de définir des règles de validation qui dépendent d'autres propriétés du modèle. Ceci est inestimable lorsque certains champs ne nécessitent une validation que dans des circonstances spécifiques.
Illustrons avec un modèle Person
contenant Name
, IsSenior
et une classe Senior
imbriquée avec une propriété Description
. Nous n'exigerons Senior.Description
que si IsSenior
est vrai.
Voici le modèle utilisant des annotations de données (une approche plus simple, mais moins flexible) :
<code class="language-csharp">public class Person { [Required(ErrorMessage = "*")] public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } } public class Senior { [Required(ErrorMessage = "*")] // This validation is not conditionally applied yet. public string Description { get; set; } }</code>
Et un extrait de vue correspondant (à titre d'illustration) :
<code class="language-html">@Html.LabelFor(m => m.Name) @Html.EditorFor(m => m.Name) @Html.ValidationMessageFor(m => m.Name) @Html.LabelFor(m => m.IsSenior) @Html.EditorFor(m => m.IsSenior) @Html.ValidationMessageFor(m => m.IsSenior) @Html.LabelFor(m => m.Senior.Description) @Html.EditorFor(m => m.Senior.Description) @Html.ValidationMessageFor(m => m.Senior.Description) </code>
IValidatableObject
Pour une validation conditionnelle plus robuste, ASP.NET MVC propose l'interface IValidatableObject
. Implémenter sa méthode Validate
permet de définir une logique de validation basée sur l'état global du modèle.
Voici le modèle Person
amélioré utilisant IValidatableObject
:
<code class="language-csharp">public class Person : IValidatableObject { public string Name { get; set; } public bool IsSenior { get; set; } public Senior Senior { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (IsSenior && string.IsNullOrEmpty(Senior?.Description)) yield return new ValidationResult("Description is required for senior citizens."); } }</code>
Cette approche offre une plus grande flexibilité et un plus grand contrôle sur les règles de validation. Pour plus de détails, consultez la documentation Microsoft appropriée (recherchez « IValidatableObject » et ASP.NET MVC). L'exemple ci-dessus utilise l'opérateur conditionnel nul (?.
) pour plus de sécurité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!