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 видеть атрибуты свойства модели нижнего уровня?
Спасибо