为asp.net RangeValidator设置Culture

时间:2010-01-19 15:32:43

标签: asp.net cultureinfo currentculture rangevalidator

一个asp:RangeValidator从页面/线程中获取它的文化信息,所有在线获取正确文化的建议似乎都是在线程上设置CultureInfo。

Rick Strahl's west wind blog is typical advice

但是,由于以这种方式运行服务器代码时出现问题,我们正在删除之前遵循此建议的代码。

我的问题是:有没有办法让我设置RangeValidator的文化而不会弄乱主页/线程文化。我希望RangeValidators尊重浏览器设置,但不幸的是他们尊重服务器文化。

2 个答案:

答案 0 :(得分:1)

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

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

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

这适用于验证器的客户端操作,在我的情况下允许法国浏览器上的用户输入法语格式的数字。但是还有一个问题 - 如果你有代码在提交/回发时验证服务器端,这个验证现在将失败 - 似乎在回发时不保留验证器的原始文化设置,它们使用的文化就位于他们在服务器端验证的时间:当然,法语数字不会被视为有效,验证失败。

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

答案 1 :(得分: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建议。