ASP.Net MVC 2.0 Проверка даты не работает - PullRequest
1 голос
/ 29 декабря 2010

Я пытаюсь проверить значение даты в формате дд / мм / гггг. Я получаю сообщение об ошибке, даже если я ввожу дату в правильном формате.

Вот мой код:

[Required(ErrorMessage = "Required Field.")]            
[RegularExpression(@"^((0[1-9])|([1-2][0-9])|3[0-1])\/((0[1-9])|(1[0-2]))\/[0-9]{4}$",ErrorMessage="Please enter in dd/mm/yyyy")]
[DataType(DataType.Date,ErrorMessage="Please enter date.")]
public DateTime BeginningDate { get; set; }

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

Сообщение об ошибке, которое вы получаете от связывателя модели, не имеет ничего общего с вашими атрибутами. Я думаю, что если вы хотите проверить регулярное выражение, вы должны использовать:

public string BeginningDate { get; set;}

и затем преобразовать его в DateTime самостоятельно, после привязки модели. Вы знаете, что дата должна быть предоставлена ​​в определенном формате, но механизм связывания не настолько умен, использует настройку web.config / server и выдает ошибку. Проверка типа DateTime с помощью регулярного выражения не имеет смысла, поскольку это уже DateTime, а не строка. Сначала выполняется привязка модели, а затем проверка.

0 голосов
/ 17 мая 2012
public class DateRegexAttribute : RegularExpressionAttribute, IClientValidatable
    {
    public DateRegexAttribute(string pattern)
        : base(pattern)
    {
    }

    public override bool IsValid(object value)
    {
        DateTime date;
        try
        {
            date = (DateTime) value;
        }
        catch
        {
            return false;
        }

        var input = date.Date.ToShortDateString();

        Match match = Regex.Match(input, Pattern, RegexOptions.IgnoreCase);

        return match.Success;
    }


    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRegexRule(ErrorMessageString, Pattern);
        return new[] { rule };
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...