【问题标题】:How to change double format of current culture asp.net如何更改当前文化asp.net的双重格式
【发布时间】:2014-12-10 07:22:38
【问题描述】:

我有一个带有下一个 TextBox 的网页:

<asp:TextBox ID="txtSum" runat="server"></asp:TextBox>  

和 compareValidator 来验证它:

<asp:CompareValidator ID="CompareValidator1" runat="server" Display="Dynamic" ControlToValidate="txtSum" ErrorMessage="less than 0" ValueToCompare="0" Type="Double" Operator="GreaterThan">  
</asp:CompareValidator>

当我将页面的文化设置为俄语时,比较验证无法正常工作。
我发现原因是英文和俄文的格式编号不同。
我尝试将格式更改如下:

NumberFormatInfo format = CultureInfo.CreateSpecificCulture("en-US").NumberFormat;  
Thread.CurrentThread.CurrentCulture.NumberFormat = format;

但它不起作用。在调试中,我看到文化的 NumberFormat 发生了变化,但在页面中我收到的消息小于 0。

我该如何解决?

【问题讨论】:

  • 好吧,当您比较您的数值时,您不会将它们与特定文化的字符串表示形式进行比较。你比较他们的真实价值。这就是为什么,我不认为指定您的 CurrentCulture 或不更改此验证。问题可能出在其他地方。
  • 我看到英文 numberFormat.CurrencyDecimalSeparator 是“.” (点)在俄语中是“,”(逗号),所以我几乎可以肯定这就是原因。 (此外,当我将文化更改为希伯来语时,我没有问题,因为希伯来语的 NumberFormat 与英语相同。

标签: c# asp.net number-formatting cultureinfo comparevalidator


【解决方案1】:

您面临的问题是由于浏览器文化造成的。浏览器文化是俄语,您在 IIS 上执行的代码可能具有英语文化。 总是浏览器文化正在过去。您需要使用不变的文化解析双精度值或更改当前的 UI 文化以使其正常工作。

protected override void InitializeCulture()
{
    Page.Culture = CultureInfo.CreateSpecificCulture("en-US");
    Page.UICulture = CultureInfo.CreateSpecificCulture("en-US");    
}

【讨论】:

  • 我当然做到了。在我写的问题中的代码之前: CultureInfoculture = CultureInfo.CreateSpecificCulture("en-US"); Thread.CurrentThread.CurrentCulture = 文化; Thread.CurrentThread.CurrentUICulture = 文化; (顺便说一下,TextBox 和 ComppareValidator 在 UserControl ascx 中)
  • 好的。您能否评论此代码并尝试设置 web.config 全球化属性。
  • 没有帮助。谢谢,但我只是用 ,不知何故效果很好。
猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
相关资源
最近更新 更多