0

私はこの質問に対する答えを検索してグーグルで検索しましたが、役に立ちませんでした。EF4とASP.NETMVC2を使用しており、ヌル不可の文字列フィールド「RecipientID」を持つEF4エンティティ「Award」があります。サーバー側の検証にDataAnnotationsを使用しているため、「Award」部分クラスで、Required属性を持つようにRecipientIDを設定しました。RecipientIDテキストボックスを空にしてフォームを送信しようとすると、Html.ValidationSummaryに「受信者を入力してください」というエラーメッセージが2回表示されます。

これは、エラーがエンティティ(null値を持つnull不可能なフィールドであるという点で)とアプリケーションの両方によってスローされているためでしょうか?理由が何であれ、これを「修正」してエラーメッセージを1回だけ表示する方法はありますか?(これが意図された動作であるかどうかわからないため、引用符で囲まれているのを修正してください。)関連するコードを含める必要はないと思いましたが、必要に応じて含めます。

よろしくお願いします。

4

2 に答える 2

2

Brad Wilsonによると、これは意図されたもののようです。「ConstraintException」とEF4を検索する必要がありました。:)

Bradによると、モデルがバインドされる前に入力検証が実行され、「必須」エラーがスローされます。さらに、これらのフィールドはnull許容ではありません。つまり、モデルのバインド中に同じ「必須」をスローします。私の意見では、SQL例外メッセージではなく、「必須」属性で指定された同じメッセージが表示されるのは、同じエラーのように見えるため、少し混乱します。それは間違いなくそうではありません。そこで、ConstraintExceptionが発生します。メッセージの重複を防ぐには、次のようにモデルバインディングコードをラップするだけです。

if (ModelState.IsValid) {
    ValidateModel(award);
    repository.Add(award);
    repository.Save();
}

そのような単純な。ありがとう!

于 2010-12-01T15:52:43.537 に答える
0

ModelState.Clear();を使用していることがわかりました。同様の問題が発生したときに機能しました。

于 2013-11-15T16:50:33.597 に答える