我正在尝试在MVC 5项目中验证模型。我创建了一种方法,该方法根据其ValidationAttributes验证模型并返回错误消息字符串列表
public static ModelStateDictionary ValidateModelWithPropertyNames<T>(this T obj, List<string> excludeProperties = null)
{
var ret = new List<Tuple<string, string>>();
var message = string.Empty;
var propertyName = string.Empty;
ModelStateDictionary dic = new ModelStateDictionary();
var context = new ValidationContext(obj, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(obj, context, results, true);
foreach (var item in results)
{
message = item.ToString();
propertyName = item.MemberNames.FirstOrDefault().ToString();
if (excludeProperties != null && excludeProperties.Any(u => u == propertyName))
continue;
dic.AddModelError(propertyName, message);
}
return dic;
}
我正在尝试使用
获取属性名称propertyName = item.MemberNames.FirstOrDefault().ToString();
,但MemberNames始终为空。有没有办法获得带有验证问题的属性名称?例如,如果我定义了这样的属性
[Required]
[ExtraInfo(ColumnName = "Description_English_Column")]
[Display(Name = "English Description")]
public string DescriptionEN { get; set; }
如果其为null或为空,则该方法将返回类似消息
“英文说明字段为必填”。
到目前为止,还不错,但是我还需要知道属性的名称才能检索ExtraInfo自定义属性值。