J'utilise la validation de modèle pour valider les demandes d'API Web à l'aide de :
Attribut de filtre d'action
Est-il possible d'avoir une règle de validation pour la propriété 'B' du modèle qui dépend de la propriété 'A'. Considérez cet exemple pour plus de clarification
public class ValidationModel
{
[Required]
public int? Id { get; set; }
public string Barcode { get; set; }
public string BarcodeType { get; set; }
}
Le modèle ci-dessus a une propriété Id qui est obligatoire et Barcode, la propriété BarcodeType qui est facultative, est-il possible de définir la propriété BarcodeType sur obligatoire si et seulement s'il y a une valeur dans la propriété Barcode (si elle n'est pas nulle et une chaîne vide )
2 réponses
Il existe un mécanisme intégré de validation personnalisée dans MVC qui est déclenché automatiquement pour les ViewModels publiés qui implémentent IValidatableObject
.
Par exemple:
public class ValidationModel : IValidatableObject {
// properties as defined above
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) {
if (!string.IsNullOrWhiteSpace(Barcode) && string.IsNullOrWhiteSpace(BarcodeType)) {
yield new ValidationResult("BarcodeType is required if Barcode is given", new[] { "BarcodeType" });
}
}
}
Vous pouvez vérifier si la validation a réussi dans le contrôleur en testant ModelState.IsValid
Je vérifierais la validation à toute épreuve MVC. C'est un package facile à utiliser qui vous fournira plusieurs façons d'accomplir une validation de modèle basée sur des conditions. Il fournit de nombreux validateurs tels que :
[ObligatoireSi]
[ObligatoireSi Non]
[ObligatoireSiVrai]
[ObligatoireSiFalse]
[ObligatoireSiVide]
[ObligatoireSiPasVide]
[ObligatoireSiRegExMatch]
[ObligatoireIfNotRegExMatch]
Cela fonctionne même avec la validation jQuery prête à l'emploi. http://foolproof.codeplex.com/
Questions connexes
Questions liées
De nouvelles questions
c#
C # (prononcé "see sharp") est un langage de programmation multi-paradigme de haut niveau, typé statiquement développé par Microsoft. Le code C # cible généralement la famille d'outils et d'exécutions Microsoft .NET, notamment le .NET Framework, .NET Core et Xamarin. Utilisez cette balise pour les questions sur le code écrit en C # ou en spécification formelle de C #.