2009-05-07 9 views
1

私はブランクとして価格を去ったとき、それは値として0をとる整数の検証

public IEnumerable<RuleViolation> GetRuleViolations() 
    { 
     if (String.IsNullOrEmpty(Name)) 
      yield return new RuleViolation("Name is Required", "Name"); 
     if (Price == 0) 
      yield return new RuleViolation("Price is Required", "Price"); 
     yield break; 
    } 

のように、サーバー側の検証を使用しています。

したがって、私はそれを0でチェックします。

マイデータベース価格はnullにできません。私はLINQ-to-SQLクラスを使用しています。

私の問題は、価格を空白のままにしたときに2つのメッセージが表示されることです。

  • 値は必須です。
  • 価格が必要です。

最初のエラーメッセージを表示せずにカスタム検証を行うにはどうすればよいですか?私はプロフェッショナルAsp.net MVC 1.0 hereの書籍コードをrefferingい

Relpyはコメントします。

書籍のHTMLページはHereです。

有用なpage

public class RuleViolation 
    { 
     public string ErrorMessage { get; private set; } 
     public string PropertyName { get; private set; } 

     public RuleViolation(string errorMessage) 
     { 
      ErrorMessage = errorMessage; 
     } 

     public RuleViolation(string errorMessage, string propertyName) 
     { 
      ErrorMessage= errorMessage; 
      PropertyName = propertyName; 
     } 
    } 
+0

"A value is required"というメッセージを生成するコードは表示されないので、言い難いです。 RuleViolationは.Netクラスか自分で作成したカスタムクラスですか? –

答えて

5

私はあなたのPriceプロパティがnullになることはありません値の型であるため、自動的にフレームワークから「値が必要とされ、」最初のメッセージを取得すると思います。

したがって、空のフィールドを投稿すると、フレームワークは通常このプロパティにnullを割り当てようとしますが、この場合はできません。

あなたがNULL値可能にするタイプに変更した場合:

public double? Price { get; set; } 

を特定のメッセージが消えなければならないことを。

if (Price == null) 
     yield return new RuleViolation("Price is required", "Price"); 

データベースフィールドがnullを許可しないという事実は、あなたのビューモデルに干渉しないはずです。

1

これは、デフォルトモデルバインダーがそのエラーを追加するためです。その特定のオブジェクトに独自のモデルバインダーを作成し、フォームコレクションで直接作業して検証をより詳細に制御できます。

2

トーマス・エイドは(コードいじりなし)仕事上で書いたものにするために、次のことができ...

  1. を開き、対応する.dbmlファイル
  2. 「価格」プロパティをクリックしてください
  3. Visual Studioのプロパティウィンドウで、Nullableの値をFalseからTrueに変更します。
  4. ファイルを保存します。

あなたのクラスに入り、if文を追加すると、VSは文句を言うべきではありません。

+0

まあ、今、私はそのコードはありませんが、あなたの答えは完璧だと思われます。 – Vikas