我试图在这种情况下将属性附加到特定属性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的工作原理吗?
答案 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; }
}