Установить культуру для asp.net RangeValidator - PullRequest
2 голосов
/ 19 января 2010

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

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

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

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

Ответы [ 2 ]

1 голос
/ 23 января 2010

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

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

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

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

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

0 голосов
/ 18 апреля 2014

Другой (и ИМХО лучше) ответ - использовать встроенный код сервера в 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" />

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

...