2012-03-13 9 views
3

MVC3で設定された邪魔にならないjqueryバリデーションで本当に苦労します。MVC3邪魔にならないjqueryのバリデーションdata-val-number

私のオブジェクトは次のようにプロパティを持っています例えば... EditorForで結構ですテキストボックスを、作る

[DisplayName("GP")] 
    [DataType(DataType.Currency)] 
    [DisplayFormat(NullDisplayText = "$0", DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)] 
    [Column("gross_profit")] 
    public decimal? GrossProfit { get; set; } 

私は、ユーザーが通貨プレフィックスを入力できるようにしたいので、しかし、検証が失敗しました$ 48,000 ..クライアント側の検証は失敗し、プロパティーは数字ではないと言います。

私自身のデータアノテーションとこれに対するカスタムモデルバインディングの作成に問題はありませんが、MVCが自動的にその "データ値番号"をテキストに挿入するのを止める方法はわかりません入力は10進形式のためです。

"data-val-number"は、入力フィールドにドル記号が含まれている可能性があるため、jqueryの邪魔にならない妥当性検査を中止すると考えています。

だから私は、ユーザーが「$ 48,000」のようなテキストを入力して、このパスの検証を持つことができるようにする方法ではなく、任意のグローバル化のヒントを探していないよ...

私は割合に同じアプローチをフォローしたいでしょう値も...例えば"25%"

答えて

1

ディスプレイにdecimal?プロパティ内の数値以外の値を使用したくない場合。これを処理するにはいくつかの方法がありますが、MVCのデフォルトのモデルバインダーは、常に######。##を小数フィールドに明示的にマップしようとします。 $ ##、###。##のような補助入力があれば、それは10進値に直接変換することができないので吹き飛ばされます。

あなたは2つのソリューションを持って、最初は以下のように入力マスキングを使用することです:

http://www.xaprb.com/html-input-mask/html-form-input-mask.html

または入力の唯一のUI表示を微調整

http://digitalbush.com/projects/masked-input-plugin/

また、モデルで使用しているのと同じロジックを文字列データ型で使用できます。

[DisplayName("GP")] 
[DataType(DataType.Currency)] 
[DisplayFormat(NullDisplayText = "$0", DataFormatString = "{0:C0}", ApplyFormatInEditMode = true)] 
[Column("gross_profit")] 
public string CurrencyDisplay { get; set; } 

public decimal? CurrencyInput 
{ 
    get 
    { 
     //parse out non-int fields to return from value in CurrencyDisplay 
    } 

    set 
    { 
     //format string and seed into CurrencyDisplay 
    } 
} 
関連する問題