ErrorMessage проигнорирован в Атрибуте DataAnnotations DataType

Используйте Robocopy, он имеет способность скопировать файлы в "прерываемом режиме", плюс он должен уважать атрибуты файла. И это идет с Vista и Сервером 2008, и можно загрузить его для более старой ОС. Плюс Вы может установить его, чтобы повторить на неудавшихся копиях, взять файлы, которые временно используются другим процессом.

5
задан Felix 23 November 2009 в 02:42
поделиться

1 ответ

Атрибут DataType в MVC1 не выполняет то, что вы ожидаете, похоже, что и в MVC2 этого нет. Лучше всего иметь строковое свойство, представляющее дату, проверьте его действительность там.

Вот небольшой отрывок из проекта (с использованием DataAnnotations и xVal):

private List<ErrorInfo> _errors;
        private List<ErrorInfo> Errors
        {
            get
            {
                if (_errors == null)
                    _errors = new List<ErrorInfo>();
                return _errors;
            }
            //set { _errors = value; }
        }

private string _startDateTimeString;

        /// <summary>
        /// A string reprsentation of the StartDateTime, used for validation purposes in the views.
        /// </summary>
        /// <remarks>
        /// If the user passes something like 45/45/80 it would be a valid mm/dd/yy format, but an invalid date,
        /// which would cause an InvalidOperationException to be thrown by UpdateModel(). By assigning dates to string properties
        /// we can check not only the format, but the actual validity of dates.
        /// </remarks>
        public string StartDateTimeString
        {
            get
            {
                return _startDateTimeString;
            }
            set
            {
                // Check whether the start date passed from the controller is a valid date.
                DateTime startDateTime;
                bool validStartDate = DateTime.TryParse(value, out startDateTime);
                if (validStartDate)
                {
                    StartDateTime = startDateTime;
                }
                else
                {
                    Errors.Add(new ErrorInfo("StartDateTime", "Provide a valid date for the start time."));
                }

                _startDateTimeString = value;
            }
        }

        partial void OnValidate(ChangeAction action)
        {
            if (action != ChangeAction.Delete)
            {
                Errors.AddRange(DataAnnotationsValidationRunner.GetErrors(this));

                if (StartDateTimeString != null)
                {
                    DateTime startDateTime;
                    if (!DateTime.TryParse(StartDateTimeString, out startDateTime))
                    {
                        Errors.Add(new ErrorInfo("StartDateTime", "Provide a valid date for the start time."));
                    }
                }

                if (Errors.Any())
                    throw new RulesException(Errors);
            }
        }
    }

Имеет смысл иметь проверку в обоих местах нашего проект, но я просто хочу показать вам концепцию.

2
ответ дан 15 December 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: