Validatable Objects 和 MetadataType 属性在部分类中被 MVC 等框架使用。
以下是使用 MetadataType 属性的示例:
[MetadataType(typeof(UserMetadata))]
public partial class User
{
private class UserMetadata
{
[DisplayName("User Id")]
public long UserId
{
get;
set;
}
[DisplayName("User Name")]
public string UserName
{
get;
set;
}
}
}
当您使用 MVC 框架时,将读取具有这些属性的任何模型,以便为相应的显示/编辑器自动生成标签字段。
使用 IValidatableObject 的示例
public partial class Apple : IValidatableObject // Assume the Apple class has an IList<Color> property called AvailableColors
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
foreach (var color in this.AvailableColors)
{
if (color.Name == "Blue") // No blue apples, ever!
{
yield return new ValidationResult("You cannot have blue apples.");
}
}
}
}
MVC 将接收这个 IValidatableObject 并确保任何通过它的验证步骤的 Apple 永远不会变成蓝色。
编辑
作为使用 IValidatableObject 的日期范围问题的示例:
public partial class ObjectWithAStartAndEndDate : IValidatableObject
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.StartDate >= this.EndDate)
{
yield return new ValidationResult("Start and End dates cannot overlap.");
}
}
}