Установить культуру для asp.net RangeValidator

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

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

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

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

2 ответа

Решение

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

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

Способ, которым я смог достичь своих целей - всегда выполнять код на стороне сервера в английской культуре, но затем заставить работать валидаторы в культуре браузера, - установить поток 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" />

Предлагается по этой ссылке.

Другие вопросы по тегам