Я создал пользовательский атрибут проверки, который выглядит примерно так:ValidationContext MemberName равен DisplayName
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public sealed class MandatoryAttribute : RequiredAttribute
{
public string DisplayName { get; private set; }
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var memberName = validationContext.MemberName;
DisplayName = AttributeFunctions.GetDisplayName(validationContext);
return base.IsValid(value, validationContext);
}
public override string FormatErrorMessage(string name)
{
return AttributeFunctions.HasValidErrorMessageResource(this) ? base.FormatErrorMessage(DisplayName) : String.Format(Global.MandatoryValidationMessage, DisplayName);
}
}
Моя модель выглядит следующим образом:
public class Model
{
[Mandatory]
[Display(Name = "ResourceName", ResourceType = typeof(Resources.Global))]
public string SomeProperty { get; set; }
}
По какой-то причине, MemberName
из ValidationContext
будет всегда быть равным тому, что я помещаю в атрибут Display
. Если я прокомментирую атрибут Display
, то MemberName
будет равен "SomeProperty"
, как и следовало ожидать.
Это нормальное поведение? Не должно ли MemberName
быть равно PropertyInfo.Name
?
Причина, по которой я говорю это, потому что мне нужно получить PropertyInfo
из контекста проверки, и я не могу этого сделать, если MemberName
не дает мне правильного значения.