Пользовательский атрибут MVC запускается до установки текущей культуры - PullRequest
0 голосов
/ 30 марта 2012

У меня есть пользовательский атрибут проверки, такой как:

public class SCIRequired : RequiredAttribute, IClientValidatable
{
    private string LocalizedErrorMessage(string fieldName)
    {
        string e = "Required";
        try
        {
            e = HttpUtility.HtmlDecode(String.Format(@Resources.ModelValidationErrors.Required, fieldName));
        }
        catch (Exception) { }

        return e;
    }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        ErrorMessage = LocalizedErrorMessage(validationContext.DisplayName);
        return base.IsValid(value, validationContext);
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        var rule = new ModelClientValidationRequiredRule(LocalizedErrorMessage(metadata.DisplayName));
        return new[] { rule };

    }
}

Это прекрасно работает, пока я не отключу JavaScript.

Когда страница публикуется, код атрибута запускается до установки CurrentCulture и поэтому не получает правильную строку локализации.

При включенном javascript все работает нормально. Это потому, что когда я просто обращаюсь к странице в первый раз (не POST), атрибуты по какой-то причине узнают о текущей культуре. Эти локализованные сообщения загружаются и являются частью HTML после рендеринга.

Проблема только для POSTS, когда ошибки атрибута должны быть загружены снова.

* EDIT * Это все еще проблема, когда включен JavaScript. Есть ли способ получить текущую культуру из пользовательского атрибута проверки на POST?

Как я могу обойти это?

* РЕДАКТИРОВАТЬ 2 * Появляется сообщение об ошибке на английском языке. Когда я шагаю по коду в режиме отладки, я вижу, как загружается строка ошибки, и я также вижу, что для CurentCulture установлено значение по умолчанию, описанное в веб-конфигурации. (Я сохраняю текущий выбранный пользователем язык в сеансе. По какой-то причине CurrentCulture или сеанс недоступны при вызове атрибута проверки)

У меня изначально был установлен тип документа HTML5

У меня теперь установлено Строгое

Изменение типа документа в коде, похоже, не имеет никакого эффекта.

Я пробовал разные вещи, и похоже, что это действительно вызвано тем, что режим документа установлен на что-то ниже IE9. (Я меняю режим документа с помощью инструментов разработчика IE9 ( F12 ))

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