代码之家  ›  专栏  ›  技术社区  ›  nat

读取控制器柱上的自定义属性参数

  •  0
  • nat  · 技术社区  · 7 年前

    我正在尝试设置条件,这不应以任何方式影响验证。

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

    然后在控制器中。

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

    只是不太确定应该从哪种类型的属性继承,也不确定如何检查特定的ViewModel属性是否用一个属性装饰。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Scrobi    7 年前

    可以从继承中创建属性 Attribute :

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

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

    然后,您可以通过反射访问这些信息:

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

    更新的链接 https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes

        2
  •  0
  •   jparaya    7 年前

    必须从System.ComponentModel.DataAnnotations继承。ValidationAttribute,并且必须实现isValid方法。检查 https://stackoverflow.com/a/11959931/1270813