MVC3:在IE和Chrome上提交字符串 - 解析失败

时间:2012-03-27 12:37:08

标签: c# string asp.net-mvc-3 parsing

我对提交的表单信息有疑问。当我尝试解析通过Interner Explorer或Chrome返回但未在Firefox或Safari上返回的字符串时,十进制解析失败。字符串在Visual Studio中看起来完全相同。我做了这个调试位:

var asd3 = collection["formValue"]; // Get it from the FormCollection
var asd4 = asd3.Replace(",", ".");  // Change the punctuation
var asd5 = Decimal.Parse(asd4);     // Make the string into a decimal
var asd6 = Math.Round(asd5, 1);     // Round it

尝试使用错误解析asd5的小数时,asd4失败:Input string was not in a correct format.

这是字符串的图像。 Top是Firefox,位于Internet Explorer之下。

enter image description here

这究竟是什么问题?

1 个答案:

答案 0 :(得分:2)

  

这究竟是什么问题?

文化。

在调试器中检查Thread.CurrentThread.CurrentCulture的值,您会发现浏览器之间存在差异。

如果您在浏览器中设置了不同的文化集,则在解析值时,ASP.NET将使用此文化,特别是如果您未在web.config中明确指定文化:

<globalization culture="en-US" uiCulture="en-US" />

如果设置为auto,则将使用浏览器文化。

另一种可能性是在解析时强制使用不变文化,以确保.(点)将是小数点分隔符。

var asd5 = Decimal.Parse(asd4, CultureInfo.InvariantCulture);