Вопрос

Asp: RangeValidator берет информацию о культуре со страницы / потока, и все онлайн-рекомендации по получению правильной культуры, похоже, заключаются в установке CultureInfo в потоке.

Блог Рика Страла "Западный ветер" - типичный совет

Однако из-за проблем с запуском серверного кода таким образом мы удаляем код, который мы использовали ранее, который следовал этому совету.

Мой вопрос заключается в следующем:есть ли у меня способ установить культуру RangeValidator, не вмешиваясь в культуру главной страницы / потока.Я хочу, чтобы RangeValidators соблюдали настройки браузера, но, к сожалению, вместо этого они соблюдают культуру сервера.

Это было полезно?

Решение

Поскольку ответов на этот вопрос не было, я собираюсь ответить на свой собственный вопрос.

Ответ заключается в том, что это, по-видимому, невозможно - нет способа установить культуру для средства проверки напрямую.

Способ, которым я смог достичь своих целей по обеспечению того, чтобы серверный код всегда выполнялся в англоязычной среде, но затем заставлял валидаторы работать в среде браузера, состоял в том, чтобы установить thread currentculture в конце Page_PreRender .Следовательно, до этого момента код выполняется в английской культуре, но мы устанавливаем культуру вовремя, чтобы она вступила в силу на момент, когда asp.net среда выполнения использует ее для настройки валидаторов.

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

Я надеюсь, что это поможет всем, кто столкнется с такой же проблемой

Другие советы

Другой (и, ИМХО, лучший) ответ заключается в использовании встроенного серверного кода в RangeValidator:

<asp:RangeValidator ID="txtLockMaxRangeValidator" runat="server"
     ValidationGroup="templateInfo" ControlToValidate="txtLockMaxFontSize"
     CssClass="validatorTextbox" 
     MinimumValue="<%# (0.01).ToString(System.Globalization.CultureInfo.CurrentUICulture)%>" 
     MaximumValue="9999" Type="Double" Text=">0 and <=9999" 
     ToolTip="<%$ Resources:Resource, TemplateInfo_maxFontValidator %>" 
     Display="Dynamic" />

Предложенный эта ссылка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top