3

我有一个带有 String 属性和以下 Data Annotation 的 ViewModel :

编辑以使用字符串

[DataType(DataType.Date, ErrorMessage="Not Working !!!")]
public String StringBirthDate1 { get; set; }

这就是我的看法

@Html.EditorFor(model => model.StringBirthDate1 )
@Html.ValidationMessageFor(model => model.StringBirthDate1)

如果我运行我的应用程序并输入一个无效的日期,例如 '---' 或 29.02.1900,我不会收到任何验证错误!

4

3 回答 3

5

好的,我已经放弃尝试使用内置的 MVC 工具进行数据验证!

我做了一个自定义验证属性:

public class ValidDateStringAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime dtout;
        if (DateTime.TryParse(value.ToString(), out dtout ))
        {
            return true;
        }
        return false;
    }
}

这是我用自定义属性装饰的视图模型:

[ValidDateString(ErrorMessage="Invalid date format")]
public String BirthDate1 { get; set; }

奇迹般有效 :-)

于 2012-09-05T08:58:50.517 回答
2

在我看来, [DataType(DataType.Date, ErrorMessage="Not Working !!!")] 当它附加到字符串属性时工作。尝试使用:

[DataType(DataType.Date, ErrorMessage="Not Working !!!")]
puplic string StringBirthDate1{get;set;}

public DateTime BirthDate1 
{ 
    get{return DateTime.Parse(StringBirthDate1);} 
    set{StringBirthDate1 = value.ToString();} 
}
于 2012-09-05T07:31:27.480 回答
0

我不喜欢我找到的任何解决方案,所以我一直在探索各种可能性,直到找到我喜欢的解决方案。我使用本文中的正则表达式添加了一个正则表达式验证器:http: //answers.oreilly.com/topic/226-how-to-validate-traditional-date-formats-with-regular-expressions/

    [Required(ErrorMessage = "Birthdate is required. [MM/DD/YYYY]")]
    [RegularExpression(@"^([1-9]|0[1-9]|1[0-2])[- / .]([1-9]|0[1-9]|1[0-9]|2[0-9]|3[0-1])[- / .](1[9][0-9][0-9]|2[0][0-9][0-9])$", ErrorMessage = "Birthdate must be in MM/DD/YYYY format.")]
    public Nullable<DateTime> Birthdate { get; set; }

结果是,如果该字段为空白,我会收到所需的错误消息,如果该字段中有任何内容,但它不是有效日期,我会收到正则表达式消息。

我可能会补充一点,[DataType] 不接受错误消息似乎很愚蠢。我尝试与该线程的原始作者完全一样。那将是合乎逻辑和直观的。

于 2014-02-13T20:20:27.267 回答