2010-01-19 5 views
2

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

Rick Strahl's west wind blog is typical advice

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

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

ответ

1

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

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

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

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

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

+0

Это определенно работает! Спасибо. –

+0

На самом деле это не работает сначала (после жесткого теста), но этот ответ дал идею, я использовал не Page_PreRender, использовал Page_PreInit. также сделать валидаторы CultureInvariantValues ​​= "true", так что это работает. Тот же ответ можно найти по адресу http://stackoverflow.com/questions/14643347/rangevalidator-currency-value-cant-contain-more-than-2-digits-after-decimal –

0

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

Предложил this link.