Установите культуру для asp.net Калибровщика диапазона
-
21-09-2019 - |
Вопрос
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" />
Предложенный эта ссылка.