2014-12-31 119 views
1
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始終是必需的,即使我重寫它。爲什麼?
屬性不能被覆蓋?

解決方案是什麼?

+2

什麼模型類型的視圖中使用?我們在這裏討論的是什麼壓倒一切的東西?這兩個模型類似乎是完全分開的,只是碰巧有相同的字段 – Andrei

+0

對不起我的錯誤遺忘:SmsListFormModel – senzacionale

+2

假設SepaExportSmsListFormModel繼承自SmsListFormModel,Attribute類將AttributeUsage Inherited屬性設置爲true,請參見http:// msdn。 microsoft.com/en-us/library/system.attribute(v=vs.110).aspx –

回答

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(); 

謝謝