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
总是需要的,即使我压倒它也是如此。为什么呢?
属性不能被覆盖?
解决方案是什么?
答案 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();
谢谢