c# - 部分元数据中的自定义数据注释不起作用
问题描述
我正在实现一个自定义数据注释,并且在主模型中它可以正常工作,但是当我将数据注释放在部分元数据中时,验证找不到这个数据注释。
我的代码如下:
public partial class register
{
public int id { get; set; }
public long idPerson { get; set; }
public string other { get; set; }
}
public partial class register_Metadata
{
[MyAttributeOne("val1")]
public int id { get; set; }
[MyAttributeOne("val1")]
public long idPerson { get; set; }
public string other { get; set; }
}
这两个类的命名空间是相同的。
另一方面,我有一个类,我将两个部分类链接起来。
[MetadataType(typeof( register_Metadata))]
public partial class register
{
}
当我使用自定义元数据验证字段时,属性函数总是有 0 个结果
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var properties = this.GetInvolvedProperties(validationContext.ObjectType);
var numberOfRequiredFields = RequireFromGroupAttribute.GetNumberOfRequiredFields(validationContext.ObjectType, this.Selector);
var values = new List<object> { value };
var otherPropertiesValues = properties.Where(p => p.Key.Name != validationContext.MemberName).Select(p => p.Key.GetValue(validationContext.ObjectInstance));
values.AddRange(otherPropertiesValues);
if (values.Count(s => !string.IsNullOrWhiteSpace(Convert.ToString(s))) >= numberOfRequiredFields)
{
return ValidationResult.Success;
}
return new ValidationResult(this.GetErrorMessage(numberOfRequiredFields, properties.Values), new List<string> { validationContext.MemberName });
}
private Dictionary<PropertyInfo, string> GetInvolvedProperties(Type type)
{
return type.GetProperties()
.Where(p => p.IsDefined(typeof(RequireFromGroupFieldAttribute)) &&
p.GetCustomAttribute<RequireFromGroupFieldAttribute>().Selector == this.Selector)
.ToDictionary(p => p, p => p.IsDefined(typeof(DisplayAttribute)) ? p.GetCustomAttribute<DisplayAttribute>().Name : p.Name);
}
我已将数据注释更改为主类,然后在属性函数中我有两个要评估的参数。但是,当我将它们放在元数据类中时,它不起作用。
解决方案
推荐阅读
- php - 包括刀片(导航刀片)未按预期工作,导航栏覆盖产量内容
- matlab - 使用 lsqcurvefit 将微分方程系统故障拟合到数据
- python - Celery Task 需要每 N 次运行一次但需要先完成
- python - Dash 应用程序在本地运行,因为它在服务器中引发错误
- c++ - Arduino:如何向任何文本框或记事本显示 Serial.print 值
- java - log4j2 Logger 仅适用于初级类 - Spring Boot
- file - 如何使用 cordova 插件在 android 和 IOS 设备中使用 IONIC 版本 1 浏览移动文件系统中的 PDF 文件
- amazon-web-services - AWS Glue 如何访问 IP 白名单资源
- python - 如何修复 AttributeError:当我尝试替换 csv 读取中的某些文本时,“列表”对象没有属性“替换”
- firebase - 批量用户订阅 Firebase 中的主题时出现权限被拒绝错误