mvc获取派生模型的属性

时间:2016-07-19 15:53:37

标签: asp.net-mvc derived-class required-field getcustomattributes memberinfo

我有一个基本模型,一个儿童模型,另一个是第二个模型的孩子:

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的属性。

问题在于,当GetCustomAttributes方法看不到reuired / requiredifsubmitting属性时 - 它为none - metadata.IsRequired设置为false。

除非我将属性放在FirstModel Property1中,否则metadata.IsRequired设置为true。

我不能将属性放在上层模型类中,因为其他模型从它们继承而不必具有必需的派生属性。

如何强制GetCustomAttributes查看较低级别模型属性的属性?

由于

0 个答案:

没有答案