2010-01-19 60 views
2

asp:RangeValidator从页面/线程中获取文化信息,并且所有关于获取正确文化的建议似乎都是在线程上设置CultureInfo。为asp.net RangeValidator设置文化

Rick Strahl's west wind blog is typical advice

然而,由于以这种方式运行服务器代码的问题,我们正在剥离出来,我们以前使用随后这个建议的代码。

我的问题是:有没有一种方法可以让我设置RangeValidator的文化而不会干扰主页面/线程文化。我希望RangeValidators尊重浏览器设置,但不幸的是,他们正在尊重服务器文化。

回答

1

由于没有答案,我将回答我自己的问题。

答案是,这似乎不可能 - 没有办法直接为验证器设置文化。

我能够实现让服务器端代码始终在英语文化中运行,但让验证器在浏览器文化中工作的目标的方式是在Page_PreRender结束时设置线程currentculture 。因此,到目前为止,代码运行在英语文化中,但是我们设置了文化,以便它在asp.net运行时使用它设置验证器时生效。

这适用于验证器的cient端操作,在我的情况下允许用户在法语浏览器中输入法语格式的数字。但是还有一个问题 - 如果你的代码在提交/回发时验证服务器端,这个验证现在会失败 - 看起来在回发时验证器的原始文化设置没有保留,他们在它们在服务器端得到验证:当然法国数据不会被视为有效,并且验证失败。

我希望这可以帮助别人谁遇到同样的问题

+0

这绝对有效!谢谢。 – 2015-04-07 11:01:52

+0

事实上,它起初并不奏效(经过严格测试),但这个答案给出了这个想法,我曾经使用过不是Page_PreRender的,使用过Page_PreInit。也使验证器CultureInvariantValues =“true”,所以它的工作原理。同样的答案可以在http://stackoverflow.com/questions/14643347/rangevalidator-currency-value-cant-contain-more-than-2-digits-after-decimal找到。 – 2015-04-07 15:46:04

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建议。