2015-11-18 4 views
1

Я создал пользовательский атрибут проверки, который выглядит примерно так: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 не дает мне правильного значения.

ответ

0

У меня такая же проблема это ошибка из WebAPI, в Mvc работает отлично

класса в исходном WebAPI коде с ошибкой https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Http/Validation/Validators/DataAnnotationsModelValidator.cs

рабочий класс в MVC 5 https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/DataAnnotationsModelValidator.cs

я постараюсь переопределить это, если работа я обновлю это сообщение

Смежные вопросы