将自定义验证属性与格式

时间:2016-02-11 15:20:39

标签: c# asp.net-mvc-5 data-annotations validationattribute

我有Customer的元数据类,我验证了PurchaseDate

  • 第一个注释(DataType)用于格式化EditorFor中的日期,以便仅显示日期部分。
  • 第二个注释是一个自定义验证,用于验证该值是否为DateTime,包括自定义错误消息。

我的问题是第一个注释将取消第二个注释的错误消息。

是否可以仅使用数据注释将这两者结合起来?或者我必须在EditorFor

中格式化日期
[MetadataType(typeof(Customer_Metadata))]
public partial class Customer { }

public class Customer_Metadata
{
    [DataType(DataType.Date)]
    [MyDate(ErrorMessage = "Invalid purchase date")]
    public DateTime? PurchaseDate { get; set; }
}

如果我尝试替换[DataType(DataType.Date)],则会出现同样的问题 与

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

我不会收到自定义错误消息。

修改
我的主要目标是获得自定义错误消息,同时仅在呈现的输入字段中显示日期部分。是否只能使用数据注释?

以下是MyDate属性:

public class MyDate : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        DateTime dt;
        var test = DateTime.TryParse((value ?? string.Empty).ToString(), out dt);
        if (test)
        {
            return ValidationResult.Success;
        }
        else
        {
            return new ValidationResult(ErrorMessage);
        }
    }
}

0 个答案:

没有答案