MVC получение атрибутов для производной модели

У меня есть 1 базовая модель, дочерняя модель и другая, которая является дочерней второй:

class FirstModel
{
    public virtual decimal? Property1 { get; set; }
}

class SecondModel : FirstModel
{
    public override decimal? Property1 { get; set; }
}

class ThirdModel : SecondModel 
{
    [RequiredIfSubmitting]
    public override decimal? Property1 { get; set; }
}

RequiredIfSubmitting продолжается BaseRequiredAttribute

Я пишу пользовательский ярлык для моего взгляда:

public static MvcHtmlString LabelForCustom<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string labelText, object htmlAttributes = null)
{
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);

            var member = expression.Body as MemberExpression;
            if (member != null)
            {
                // Does it have the required attribute?
                var isRequired = Attribute.GetCustomAttributes(member.Member, typeof(RequiredAttribute), false).Any();

                if (!isRequired)
                {
                    metadata.IsRequired = Attribute.GetCustomAttributes(member.Member, typeof(BaseRequiredAttribute), true).Any();
                }
            }
        }

Я пытаюсь получить атрибуты для ThirdModel.Property1.

Проблема заключается в том, что когда атрибут reuired/requiredifsubmitting не виден для метода GetCustomAttributes - он появляется как none - metadata.IsRequired устанавливается в false в качестве результата.

Если я не добавлю атрибуты в FirstModel Property1, тогда metadata.IsRequired будет установлен в true.

Я не могу поместить атрибуты в верхние классы моделей, потому что другие модели наследуются от них, которые не обязательно имеют обязательные производные свойства.

Как заставить GetCustomAttributes видеть атрибуты свойства модели нижнего уровня?

Спасибо

0 ответов

Другие вопросы по тегам