属性覆盖没有影响

时间:2014-12-31 10:29:16

标签: c#

public class SmsListFormModel
    {
        [MyRequired]
        [Display(Name = Translations.Global.MESSAGE)]
        public virtual string SmsMessage { get; set; }
    }

然后我正在覆盖

public class SepaExportSmsListFormModel : SmsListFormModel
    {
        [Display(Name = Translations.Global.MESSAGE)]
        public override string SmsMessage { get; set; }
    }

所以现在SmsMessage不再是我的强制执行者了。

但如果我正在检查代码:

@Html.TextBoxAreaFor(x => x.SmsMessage)

,里面的代码如下:

var metaData = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
if (metaData.IsRequired) {....

但是SmsMessage总是需要的,即使我压倒它也是如此。为什么呢?
属性不能被覆盖?

解决方案是什么?

1 个答案:

答案 0 :(得分:0)

使用@Piotr想法:

[AttributeUsageAttribute(AttributeTargets.All, Inherited = false, AllowMultiple = false)] 

我找到了解决方案:

var metaData = ModelMetadata.FromLambdaExpression(Model => Model, ViewData);

var required = metaData.ContainerType.GetProperty(metaData.PropertyName).GetCustomAttributes(typeof (RequiredAttribute), false).Any();

谢谢