2012-04-08 69 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; } 
}