Локализация DataAnnotations Пользовательский атрибут проверки - PullRequest
1 голос
/ 22 марта 2010

В настоящее время я работаю в приложении MVC 2, в котором все должно быть локализовано на n-языках (в настоящее время 2, ни один из них, кстати, английский).Я проверяю классы моей модели с помощью DataAnnotations, но когда я захотел проверить поле DateTime, обнаружил, что DataTypeAttribute всегда возвращает true, независимо от того, была ли это допустимая дата или нет (потому что, когда я вводил случайную строку «foo», IsValid () метод проверяет "01/01/0001", не знаю почему).

Решил написать свой собственный валидатор, расширяющий класс ValidationAtribute:

public class DateTimeAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime result;
        if (value.ToString().Equals("01/01/0001 0:00:00"))
        {
                return false;
        }
        return DateTime.TryParse(value.ToString(), out result);
    }
}

Теперь он проверяет ОК, когда он действителен икогда это не так, но моя проблема начинается, когда я пытаюсь его локализовать:

[Required(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_Required")]
[CustomValidation.DateTime(ErrorMessageResourceType = typeof(MSG), ErrorMessageResourceName = "INS_DATA_DataType")]
public DateTime INS_DATA { get; set; }

Если я ничего не помещаю в поле, я получаю локализованный MSG (MSG - мой класс ресурсов) для ключа = INS_DATA_Required, но еслиЯ поставил неверно отформатированную дату и получаю сообщение по умолчанию «Значение 'foo' недопустимо для INS_DATA", а не локализованный MSG.

Что я пропускаю?

1 Ответ

0 голосов
/ 24 марта 2010

Возможно, ваш ToString () использует «локализованный» формат, поэтому ваша жестко закодированная строка не будет совпадать. попробуйте заменить условие "если" на:

if((DateTime)value == DateTime.MinValue)
...