2012-04-08 18 views
1

このケースではFirstNameという特定のプロパティにアトリビュートを添付しようとしていますが、このコードに問題があります。これはbirthday datetimeプロパティにも関連付けられています。この問題が何であるか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

+0

大きなものの再生 – maztt

答えて

3

問題は、GetValidatorsメソッドとは関係ありません。

int, decimal, DateTime, etc.)のような値の種類がデフォルトで必要です。そうでなければ、モデルバインダーは要求と共に送信されないと値を設定できないためです。

だから、あなたはあなたが必要としたくない場合はNULL可能で、あなたのためにBirtdayプロパティを変更する必要があります。

public class User 
{ 
    public int UserId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public DateTime? Birthday { get; set; } 
} 
関連する問題