我有 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 的属性。
问题是,当 getCustomAttributes 方法看不到 reuired/requiredifsubmitting 属性时 - 它没有出现 - metadata.IsRequired 结果设置为 false。
除非我将属性放在 FirstModel Property1 中,否则 metadata.IsRequired 设置为 true。
我不能将属性放在上层模型类中,因为其他模型从它们继承而不必具有强制派生属性。
如何强制 GetCustomAttributes 查看较低级别模型属性的属性?
谢谢