代码之家  ›  专栏  ›  技术社区  ›  Andrej Kaurin

数据注释

  •  0
  • Andrej Kaurin  · 技术社区  · 15 年前
    public class Dinner
        {
            public string ID { get; set; }
            public string Title { get; set; }
            public Category Category { get; set; }
            public DateTime? DateCreated { get; set; }
        }
    

    该类(重要部分)的模型视图是

    public class DinnerModelView
        {
            ...
            [UIHint("DatePicker")]
            [DateTime(ErrorMessage = "Invalida date")]
            public DateTime? DateCreated { get; set; }
        }
    

    其中datetimeattribute是

    public class DateTimeAttribute : ValidationAttribute
        {
            public DateTimeAttribute () : base (() => "Invalid date") { }
            public DateTimeAttribute(string errorMessage) : base(() => errorMessage) { } 
            public override bool IsValid(object value)
            {
                if (value == null)
                    return true;
    
                bool isValid = false;
                if (value is DateTime)
                    isValid = true;
    
                DateTime tmp;
                if (value is String)
                {
                    if(String.IsNullOrEmpty((string)value))
                        isValid = true;
                    else
                        isValid = DateTime.TryParse((string)value, out tmp);
                }
    
                return isValid;
            }
        }
    

    但是,模型状态错误仍然表示“值'XXXX'对于datecreated无效。” 我无法替换此消息。为什么?

    2 回复  |  直到 13 年前
        1
  •  0
  •   olf    13 年前

    似乎因为datecreated属性的类型是datetime,所以MVC将在检查datetime属性之前对其进行某种验证,从而永远不会得到自定义错误消息。

    如果将创建日期改为字符串,它可能会工作。但由于必须将该值保存到数据库中,因此不希望更改日期创建类型。因此,您可以创建一个名为dateCreatedStr的新属性,并让用户在该属性中键入数据。在保存数据之前,可以将(已验证)数据从dateCreatedStr移动到dateCreatedStr。

    我知道这不是一个很好的方法,但它是有效的!

        2
  •  0
  •   Sperling    15 年前

    使用 protected ValidationAttribute(string errorMessage) 而不是 protected ValidationAttribute(System.Func errorMessageAccessor) . 稍后用于访问资源文件中定义的字符串。退房 http://msdn.microsoft.com/en-us/library/cc679238.aspx