0

リンクテキストからMVC検証ライブラリを使用しています。このライブラリを選択したのは、MSEnterpriseライブラリ検証ブロックを使用してすべての検証属性を生成する.NetTiersも使用しているためです。

モデルバインディングがオブジェクトを自動的に検証し、検証の概要を入力することを除いて、正常に機能します。私はこれを通常の行動で信じています。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register([Bind()]NetTiersObject obj)
{
    return View();
}

検証ライブラリには、次のように文書化されているメソッドもあります。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register([Bind()]NetTiersObject obj)
{
    try
    {
        obj.Validate<NetTiersObject>();
    }
    catch (EntityValidationException ex)
    {
        ViewData.ModelState.PopulateWithErrors(ex);
    }
    return View();
}

これも問題なく動作します。

私の問題は、検証ライブラリのメソッドを使用すると、エラーメッセージが重複することです。モデルバインディングを使用するだけの場合、エラーメッセージは奇妙に見えます。エラーには、メッセージにプロパティ名が含まれています。

したがって、モデルバインディングのエラーメッセージをフォーマットするか、モデルバインディングを完全に無効にする必要があると思います。

何かお勧め、助けて?

ありがとう。

4

2 に答える 2

0

ModelStateが無効である理由に対する答えを見つけました。フォーム要素がモデルと一致しないため、ModelStateがすぐに無効になる唯一の方法です。

詳細を見つけたら、この投稿を更新します。

于 2009-12-09T01:01:31.887 に答える
0

試してみましたか:

    /*At the Point the ModelState should be Valid(TRUE)
      because we still didn't enforce any validations */
    var v = ModelState.IsValid;

try
    {
        obj.Validate<NetTiersObject>();
    }
    catch (EntityValidationException ex)
    {
        ViewData.ModelState.PopulateWithErrors(ex);
    }

そして、v が True かどうかを確認してください。true の場合obj.Validate<NetTiersObject>();は、エラーが重複して入力されているだけであるため、何か間違ったことをしています。

私の問題は、検証ライブラリのメソッドを使用するとエラーメッセージが複製されることです。モデル バインディングを使用しただけでは、エラー メッセージが奇妙に見えます。エラーのメッセージにはプロパティ名が含まれています。

少なくともカスタム モデル バインディングを使用していないか、フィールドを検証せずに DB に保存しようとしている場合は、modelBinding がモデル エラーを生成しないため、これは奇妙です。

于 2009-12-08T19:59:37.433 に答える