У меня есть пользовательский атрибут проверки, такой как:
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 ))