2017-07-13 14 views
0

Je voudrais écrire un attribut personnalisé que je peux décorer une propriété ViewModel avec tel que, lorsque le ViewModel est posté, je peux vérifier pour voir laquelle des propriétés publiées a cet attribut et exécuter certains logique. J'essaie de définir des conditions, ce qui ne devrait en aucun cas affecter la validation.Lire le paramètre d'attribut personnalisé sur le poste de contrôleur

[SetsCondition(SomeEnumerationValue)] 
public Fund SelectedFund {get;set;} 
... 
other properties 

puis dans le contrôleur.

[HttpPost] 
public IActionResult SelectFund(SelectFundViewModel model){ 
    if(ModelState.IsValid){ 
     //check which properties have the SetsCondition Attribute 
     //read the SomeEnumerationValue for them 
     .. 
     //profit 
    } 
} 

pas tout à fait sûr de ce genre d'attribut je devrais être héritant de, ou d'ailleurs, comment vérifier si une propriété particulière ViewModel est décorée avec un.

toute aide appréciée

Répondre

1

Vous pouvez créer l'attribut de héritant de Attribute:

[System.AttributeUsage(System.AttributeTargets.Property)] 
public class ConditionAttribute : System.Attribute 
{ 
    public readonly string value; 
    public ConditionAttribute(string value) 
    { 
     this.value = value; 
    } 
} 

Utilisation

[Condition("Some Value")] 
public bool Property { get; set; } 

Vous pouvez accéder à cette information par la réflexion: Le exemple ci-dessous est de prendre de la lien fourni ci-dessus:

System.Reflection.MemberInfo info = typeof(MyClass); 
object[] attributes = info.GetCustomAttributes(true); 
for (int i = 0; i < attributes.Length; i ++) 
{ 
    System.Console.WriteLine(attributes[i]); 
} 

Lien mis à jour https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes