2

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

Rick Strahl 的西风博客是典型的建议

但是,由于以这种方式运行服务器代码的问题,我们正在剥离我们之前使用的遵循此建议的代码。

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

4

2 回答 2

2

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

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

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

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

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

于 2010-01-23T08:51:13.213 回答
1

另一个(恕我直言更好)的答案是在 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" />

此链接建议。

于 2014-04-18T16:08:27.410 回答