2010-10-15 10 views
0

J'ai un modèle de vue comme celui qui est créé à partir de mon validateur.Vérification dynamique de chaque valeur KeyValuePair d'un modèle

public class ViewModel 
{ 
    public KeyValuePair<int, RuleType> Foo { get; set; } 
    public KeyValuePair<string, RuleType> Bar { get; set; } 
} 

Mon modèle de vue réelle a un champ de 20+. Une fois mes données validées, une liste générique de type ViewModel est ensuite renvoyée dans ma vue MVC et traitée dans un rapport. Cependant, une demande de fonctionnalité a été lancée lorsque les utilisateurs souhaitent voir uniquement les modèles avec des erreurs et des avertissements, à l'exclusion des entités valides. RuleType est un énumérateur. Un modèle est valide si toutes les valeurs de la paire de clés sont RuleType.Success.

Est-il possible de faire une boucle dans chaque modèle et de vérifier le RuleType sans avoir à vérifier manuellement chaque propriété? Ma fonction GetAllModelsWithErrors() renvoie une liste de modèles non valides. Je crois que la réflexion pourrait être une solution mais je ne suis pas sûr que ce soit une bonne solution.

+1

Vous pouvez enregistrer toutes les propriétés de votre ViewModel ou de réflexion d'utilisation. Vous pouvez les enregistrer par exemple via le mutateur 'set' de chaque propriété (vous obtiendrez ainsi une collection d'instances' KeyValuePair' et vous pourrez les valider). –

Répondre

2

Essayez ceci:

private IEnumerable<ViewModel> GetInvalidModels(ViewModel[] viewModels) 
    { 
     return 
      from viewModel in viewModels 
      from prop in typeof(ViewModel).GetProperties() 
      let ruleType = ((KeyValuePair<object, RuleType>)prop.GetValue(viewModel, null)).Value 
      where ruleType != RuleType.Success 
      select viewModel; 
    } 
+0

La ligne 'let ruleType' renvoie une exception non valide lorsque j'utilise' ToList() 'sur mes résultats. Devrais-je faire quelque chose de différent si certaines de mes valeurs KeyValuePair ont des types nullables? – Mike

+0

Comme vous l'avez dit vous-même, "Un modèle est valide si toutes les valeurs de la paire de clés sont RuleType.Success". Par conséquent, ma requête est basée sur l'hypothèse que vos valeurs dans KeyValuePairs sont toujours de type RuleType qui est un Enum et donc nullable. – danijels

+0

Vous avez complètement raison. Je vous remercie. :) – Mike