读取控制器上的自定义属性参数 post
Read custom attribute parameter on controller post
我想编写一个自定义属性,我可以用它来装饰 ViewModel 属性,这样,当发布 ViewModel 时,我可以检查哪些已发布的属性具有此属性 运行 一些逻辑。
我正在尝试设置条件,这应该不会以任何方式影响验证。
[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 属性 是否装饰有一个属性。
非常感谢任何帮助
必须继承自System.ComponentModel.DataAnnotations.ValidationAttribute,并且必须实现isValid 方法。检查 示例
您可以通过继承 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; }
然后您可以通过反射访问此信息:
以下示例取自上面提供的 link:
System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i ++)
{
System.Console.WriteLine(attributes[i]);
}
已更新 link https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes
我想编写一个自定义属性,我可以用它来装饰 ViewModel 属性,这样,当发布 ViewModel 时,我可以检查哪些已发布的属性具有此属性 运行 一些逻辑。 我正在尝试设置条件,这应该不会以任何方式影响验证。
[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 属性 是否装饰有一个属性。
非常感谢任何帮助
必须继承自System.ComponentModel.DataAnnotations.ValidationAttribute,并且必须实现isValid 方法。检查 示例
您可以通过继承 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; }
然后您可以通过反射访问此信息: 以下示例取自上面提供的 link:
System.Reflection.MemberInfo info = typeof(MyClass);
object[] attributes = info.GetCustomAttributes(true);
for (int i = 0; i < attributes.Length; i ++)
{
System.Console.WriteLine(attributes[i]);
}
已更新 link https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/attributes