使用TryValidateObject获取属性名称

时间:2018-11-27 11:06:48

标签: c# asp.net-mvc-5

我正在尝试在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自定义属性值。

0 个答案:

没有答案