2010-12-04 12 views
4
public Decimal SalePrice { get; set; } 

小数点データentery

<%= Html.TextBoxFor(Model => Model.SalePrice) %> 

ユーザーからの検証や適切な入力項目を確保するための良い方法は何ですか?物事は数字のenteriesと2つの小数点までしか許さない?

答えて

7

次のような正規表現は動作するはずです:マイクが示唆したように、あなたはできる、

2.00 
25.70 
04.15 
2.50 
525.43 
423.3 
52 

そして:

\A\d+(\.\d{1,2})?\Z 

これは次のように入力と一致しますこれをデータ検証属性に使用してください:

[RegularExpression(@"\A\d+(\.\d{1,2})?\Z", ErrorMessage="Please enter a numeric value with up to two decimal places.")] 
public Decimal SalePrice { get; set; } 

編集:あなたの二つの質問に応えて

1)私たちは、そのフィールドのフォーカスを失うとき、これは右提出していないに検証?

属性が追加されていると仮定すると、送信時にはいの検証が行われます。技術的には、フォームパラメータがモデルにバインドされると検証が行われます。しかし、実際にこれを利用するために、あなたはあなたのコントローラ内での検証パラメータをチェックする必要があります。

public ActionResult MyController(MyModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // do stuff 
    } 
    else 
    { 
     // Return view with the now-invalid model 
     // if you've placed error messages on the view, they will be displayed 
     return View(model); 
    } 
} 

検証を持っているために、サーバー側に加えて、クライアント側に発生するには、JavaScriptを使用する必要があるだろう。 Microsoft AJAX検証の基本的な例はScott Gu's blogです。

2)あなたは私の最大のエントリは100.00と分のエントリはおそらく何らかの形で正規表現でこれを行うことができ1.00

下回ることはできません超えることはできません正規表現を表示することができますが、正規表現は本当に何のために設計されていませんパターンマッチング以上のものこれを行うより良い方法は、正規表現属性に加えて、範囲の検証属性を追加することです。だからあなたのプロパティは次のようになります:

上記のコードはテストされていませんが、一般的なアプローチが有効です。

+0

途中でありがとうと素晴らしい説明。私は間違いなくこれを試してみます。 – VoodooChild

1

regex文字列を使用して、クライアント側とサーバー側の入力を検証できます。

コントローラーアクションにRegularExpression属性を設定した場合は、そのフィールドに従わなければならない形式を正規表現の文字列で指定できます。この属性を使用すると、クライアント側とサーバー側の両方の検証が得られます(MVC 2.0以降を使用していると仮定します)。

[RegularExpression("*YourRegexExpression*", ErrorMessage="You must provide a decimal value.")] 

私は役に立つと思います。

詳細については、モデル検証についてのScott Guのブログ記事を参照してください。

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

マイクは

関連する問題