2011-01-13 8 views
8

私は入力、フィールドが私のSQL Server 2008 R2データベースにfloatとして設定されていることができビューを持っていると私は、フィールドは、このprivate Nullable<global::System.Double> _TestNumber;なぜASP.NET MVC 3は浮動小数点数を正しく検証しないのですか?

のように見えるEntity Frameworkのモデルでは、エンティティFramwork 4

を使用しています

とビューは次のように入力を許可するようにEditorFieldを使用しています。

<div class="editor-field"> 
    @Html.EditorFor(model => model.TestNumber) 
    @Html.ValidationMessageFor(model => model.TestNumber) 
</div> 

私はしかし、検証メッセージに、このエラーを取得しています:The value '13.51' is not valid for TestNumber.私はピリオドの代わりにコンマ、同じことを試してみました。

提案?

動作するはず

答えて

2

ビューモデル:

public class MyViewModel 
{ 
    public double? TestNumber { get; set; } 
} 

コントローラー:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel { TestNumber = 13.51 }); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 
} 

ビュー:あなたがチェックアウトしてでき

@model AppName.Models.MyViewModel 
@{ 
    ViewBag.Title = "Home Page"; 
} 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.TestNumber) 
    @Html.ValidationMessageFor(x => x.TestNumber) 
    <input type="submit" value="OK" /> 
} 

ことの一つは、説明することができます行動あなたが観察しているものは、クライアント側の文化とサーバー側の文化との間に矛盾があります。たとえば、クライアント側の検証を有効にしたが、クライアントカルチャが小数点の区切り文字として,を使用する場合、13.51はクライアント側の検証に失敗し、サーバー文化が小数点記号として.を使用すると、13,51はサーバー側の検証に失敗します。したがって、13.5113,51の両方が検証に失敗しましたが、異なるレイヤーで検証されています。あなたのweb.configファイルにautoに次の文化を設定することができ、クライアントと同じ文化を使用するサーバーのために:

<globalization 
    requestEncoding="utf-8" 
    responseEncoding="utf-8" 
    culture="auto" 
    uiCulture="auto" 
/> 
+1

私は '' ではなく、すぐに私が提出するように、そのグローバル化を追加しました'' .50 'の値は 'のためには無効です。今、本当に同じ文化になっていることをどうすれば確認できますか? –

+0

@Filip Ekberg、 '10,50'についてはどうですか? –

+0

これは、ClientValidationEnabledを '' falseに設定したときに機能しますが、trueに設定されている場合は機能しません。 –

関連する問題