2012-04-08 90 views
1

我想附加一個屬性到在這種情況下的名字的特定屬性,但問題是在這個代碼它附加到生日日期時間屬性以及。這可能是什麼問題asp.net mvc dataannotions附加屬性

public class CustomMetadataValidationProvider : DataAnnotationsModelValidatorProvider 
{ 
    protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes) 
    { 
     if (metadata.PropertyName == "FirstName") 
      attributes = new List<Attribute>() { new RequiredAttribute() }; 

     return base.GetValidators(metadata, context, attributes); 
    } 
} 

public class User 
{ 
    public int UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime Birthday { get; set; } 
} 



protected void Application_Start() 
    { 

     //ModelValidatorProviders.Providers.Clear(); 
     //ModelValidatorProviders.Providers.Add(new CustomMetadataValidationProvider()); 
     ModelValidatorProviders.Providers.Add(new CustomMetadataValidationProvider()); 
     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 
    } 

有人可以解釋如何GetValidators工作?

+0

這是一個簡單的例子?以這種方式添加驗證器有點不尋常。 – Betty 2012-04-08 07:06:22

+0

只是玩大的東西 – maztt 2012-04-08 07:19:55

回答

3

您的問題與您的GetValidators方法無關。

默認情況下需要像(int, decimal, DateTime, etc.)這樣的值類型。否則,如果模型聯編程序未與請求一起發送,則無法設置它們的值。

所以,你需要改變你的Birtday屬性可空,如果你不想被要求做:

public class User 
{ 
    public int UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime? Birthday { get; set; } 
}