Defina a cultura para um ASP.NET RangeValidator
-
21-09-2019 - |
Pergunta
Um ASP: RangeValidator retira suas informações de cultura da página/ tópico e todos os conselhos on -line sobre a obtenção da cultura certa parece ser definir o CultureInfo no tópico.
O West Wind Blog de Rick Strahl é um conselho típico
No entanto, devido a problemas de executar o código do servidor dessa maneira, estamos retirando o código que estávamos usando anteriormente que seguiram esse conselho.
Minha pergunta é: existe uma maneira de definir a cultura de um RangeValidator sem mexer com a cultura principal da página/ thread. Quero que os RangeValidators respeitem as configurações do navegador, mas infelizmente eles estão respeitando a cultura do servidor.
Solução
Como não houve respostas para isso, vou responder minha própria pergunta.
A resposta é que isso não parece ser possível- não há como definir diretamente a cultura para um validador.
A maneira pela qual eu consegui atingir meus objetivos de ter o código do servidor em execução sempre em uma cultura inglesa, mas depois de fazer com que os validadores trabalhassem na cultura do navegador era definir o Thread CurrentCulture no final de Page_Prender. Portanto, até esse ponto, o código é executado na cultura inglesa, mas definimos a cultura a tempo de estar em vigor quando o tempo de execução do ASP.NET o usar para configurar os validadores.
Isso funciona bem para a ação do lado da Cient dos validadores, no meu caso, permitindo que os usuários de um navegador francês inseram números em um formato francês. Mas há mais um Gotcha- Se você tiver código para validar o lado do servidor em envio/ postback, essa validação agora falhará- parece que, no postback, as configurações originais da cultura do validador não são retidas, elas usam a cultura em vigor no Tempo em que são validados no lado do servidor: é claro que os números de francês não são vistos como válidos e a validação falha.
Espero que isso ajude qualquer outra pessoa que encontre o mesmo problema
Outras dicas
Outra resposta (e IMHO melhor) é usar o código do servidor embutido no 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" />
Sugerido por esse link.