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
Justice 17 juin 2016 à 10:46

2 réponses

Meilleure réponse

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

3
Georg Patscheider 17 juin 2016 à 11:07

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/

0
Community 20 juin 2020 à 12:12