一个asp:RangeValidator从页面/线程中获取它的文化信息,所有在线获取正确文化的建议似乎都是在线程上设置CultureInfo。
Rick Strahl's west wind blog is typical advice
但是,由于以这种方式运行服务器代码时出现问题,我们正在删除之前遵循此建议的代码。
我的问题是:有没有办法让我设置RangeValidator的文化而不会弄乱主页/线程文化。我希望RangeValidators尊重浏览器设置,但不幸的是他们尊重服务器文化。
答案 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建议。