1

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

BlogPost エンティティに注釈を付けました。これが Post アクションです。

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

    return (View(b));
}

サービスメソッドは次のとおりです。

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

    _blogRepo.Insert(post);
}

(DataAnnotationsValidationRunner は、ブログ投稿の例からのそのままであることに注意してください)。完全に無効な BlogPost フォームを送信すると、次の検証エラーのリストが表示されます。

  • 値が必要とされます。
  • タイトルを入力してください
  • 投稿日を入力してください
  • 内容を入力してください
  • タイトルを入力してください
  • 投稿日を入力してください
  • 内容を入力してください

最初のメッセージが何のためのものかさえわかりませんが、ご覧のとおり、他のエラーが 2 回表示されています。私は何を間違っていますか?それとも、これは MVC V2 の問題ですか?

4

1 に答える 1

1

ASP.Net MVC 2 Preview 1 以降、すぐに使える DataAnnotation 検証サポートが得られるようになったため、ModelBinder ロジックを実行すると DataAnnotation ルールが適用されるという問題があると思います。

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

次に、XVal ロジックを使用して、チェックを再度要求しています。

var errors = DataAnnotationsValidationRunner.GetErrors(post);

これは、それらが同じ順序で繰り返されるという事実によって裏付けられています。

public ActionResult Index(BlogPost b)は DataAnnotation ルールを実行しなかったため、コードはバージョン 1 の MVC で正常に機能していました。新しい DataAnnotation ロジックをオフにして XVal のみを使用できるかどうかは、どこにも読んでいません。

これに関する詳細は、Scott の投稿可能なプレビュー 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));
}
于 2009-08-09T11:42:25.960 に答える