asp.net mvc dataannotions附加属性

时间:2012-04-08 06:47:35

标签: asp.net-mvc data-annotations

我试图在这种情况下将属性附加到特定属性FirstName,但问题是在此代码中它也附加到生日日期时间属性。这可能是什么问题

 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的工作原理吗?

1 个答案:

答案 0 :(得分: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; }
}