Проблема проверки с Windows Azure, EF и MVC3 - PullRequest
6 голосов
/ 20 августа 2011

У меня проблема с ошибкой проверки, которая появляется только в Windows Azure, но не в локальном эмуляторе Azure.

В моей модели у меня есть класс с атрибутом «Пуск» и DisplayFormat для немецкого формата даты:

[Required]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
[Display(Name = "Beginn")]
public DateTime Start { get; set; }

На моем локальном компьютере все в порядке, но когда я пытаюсь сохранить поле в экземпляре Windows Azure, я получаю это сообщение проверки:

Значение '22 .08.2011 'недействительно для Beginn.

Оба (локальные и облачные) используют одну и ту же базу данных (Azure SQL). Итак, я в замешательстве. Есть идеи как это исправить?

1 Ответ

7 голосов
/ 20 августа 2011

Атрибут DisplayFormat (как следует из названия) используется только для отображения значения свойства в указанном формате. Это не имеет абсолютно никакого отношения к валидации.

В этом случае проверка выполняется связывателем модели по умолчанию, когда он пытается установить для строки POSTed свойство DateTime. Он использует локаль по умолчанию, которая может быть указана в вашем web.config с помощью элемента globalization:

<system.web>
    ...
    <globalization culture="de-DE" uiCulture="de-DE"/>
</system.web>

Причина, по которой ваш код не работает при развертывании его на экземпляре Azure, заключается в том, что, скорее всего, сервер настроен на использование культуры en-US, для которой формат даты и времени отличается.

Если вы хотите использовать какой-то более конкретный формат, вы также можете написать пользовательское связующее для вашей модели представления, а внутри вручную проанализировать значение POSTed, используя этот специальный настраиваемый формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...