2009-08-07 30 views
1

ASP.NET MVC 2プレビュー1プロジェクトでxValをセットアップしようとしています。私は基本的には、http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/の例に従っています(サーバー側のみ、これまでのところ)。xValエラーメッセージが2回表示される

私はブログ投稿のエンティティを注釈を付け、ここでPOSTアクションでいる:

public void Insert(BlogPost post) 
{ 
    var errors = DataAnnotationsValidationRunner.GetErrors(post); 
    if(errors.Any()) 
    { 
     throw new RulesException(errors); 
    } 

    _blogRepo.Insert(post); 
} 

(DataAnnotationsValidationRunnerは、例えば、ブログ記事から逐語的であることに注意してください:

[HttpPost] 
public ActionResult Index(BlogPost b) 
{ 
    try 
    { 
     _blogService.Insert(b); 
    } 
    catch (RulesException ex) 
    { 
     ex.AddModelStateErrors(ModelState, ""); 
    } 

    return (View(b)); 
} 

そしてここでは、サービスメソッドです)。私が完全に無効なBlogPostフォームを送信すると、この検証エラーのリストが表示されます:

  • 値は必須です。
  • タイトルを入力してください
  • 一部のコンテンツを入力してください掲載の日付を入力してください
  • 一部のコンテンツを入力してください
  • 投稿日付を入力してくださいタイトルを入力してください

私は最初のメッセージが何であるか分からないが、あなたが見ることができるように、他のエラーは2回現れている。私は間違って何をしていますか?またはこれはMVC V2の問題ですか? ASP.Net MVC 2プレビュー1を起動する

答えて

1

我々は今、箱から出してDataAnnotation検証サポートを得るので、私はあなたの問題がModelBinderロジックが実行されるとき、それはDataAnnotationルールを適用していることだと思います:

public ActionResult Index(BlogPost b) //Create BlogPost object and apply rules 

あなたのXValロジックでもう一度チェックを要求しています:

var errors = DataAnnotationsValidationRunner.GetErrors(post); 

これは同じ順序で繰り返されるという事実によってバックアップされます。

公共のActionResultインデックス(ブログ投稿のB)がDataAnnotationルールを実行していないだろうとあなたのコードは、MVCのバージョン1でうまく働いているだろう。新しいDataAnnotationロジックをオフにしてXValだけを使用することができればどこでも読んでいません。

Scott's post able preview 1

にこれについての詳細情報は、最初の項目は、デバッグを実行しているかを調べると、このエラーが関連しているオブジェクトにどのようなプロパティを教えてくれるよう、にModelStateにあるどのようなエラーをチェックするためにあります。

[HttpPost] 
public ActionResult Index(BlogPost b) 
{ 
    try 
    { 
     _blogService.Insert(b); //Add breakpoint here and check ModelState 
    } 
    catch (RulesException ex) 
    { 
     ex.AddModelStateErrors(ModelState, ""); 
    } 

    return (View(b)); 
} 
+0

ええ、そうです。私は実際にAnnotationが簡単にうまくいくとは思っていませんでした。とにかく、プライベートセット(NHibernate POCO)を使うためにId値を設定しなかったので、もう1つのエラーがありました。どうもありがとう! –

関連する問題