2012-03-27 7 views
3

送信されたフォーム情報に問題があります。 FirefoxやSafariではなく、Interner ExplorerやChromeから返された文字列を解析しようとすると、小数点の解析が失敗します。文字列はVisual Studioでまったく同じに見えます。私はこのデバッグビットを作っ:MVC3:送信文字列 - IEおよびChromeで解析が失敗する

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 

エラーでasd4のうち、小数点以下を解析しようとすると、それはasd5に失敗:Input string was not in a correct format.

ここでは、文字列の画像です。トップはFirefoxとInternet Explorerの下にあります。

enter image description here

地球上でここで何が問題になるだろうか?

+0

常に特定のカルチャ情報を使用して数値を解析します。例: 'Decimal.Parse(number、new CultureInfo( "en-US"))'。両方の例で入力が「5.5」の場合は、カルチャ情報を指定すると失敗しません。 –

答えて

2

What on earth could be the problem here?

デバッガーでThread.CurrentThread.CurrentCultureの値を調べると、ブラウザーの違いが表示されます。

ブラウザで設定したさまざまな文化を持っている場合は値を解析する際に、この文化が明示的にあなたのweb.configファイル内の文化を指定していない場合は特にASP.NETによって使用されます。

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

の場合これはautoに設定され、ブラウザのカルチャが使用されます。

また、.(ドット)が小数点の桁区切りになるように、解析時に不変のカルチャを強制することも可能です。

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

はい!これにより、web.configのcultureがautoからdefined cultureに変更されました。ありがとうございました! – Esa

関連する問題