2012-01-11 12 views
1

コントローラに追加されたエラーと一緒に機能する控えめなクライアント側の検証を実装する方法を理解する上で問題があります。ModelState.AddModelError()定義済みとModelStateのエラーを組み合わせたMVC3の検証サマリー

だから、これは現在のコードです:

@Html.ValidationSummary(true) 
@Html.ValidationMessageFor(model => model.FirstName) 
@Html.ValidationMessageFor(model => model.LastName) 

私はファーストネームを残している場合は、エラーメッセージが正しく表示されます。私がファーストネームを入力してタブアウトすると、メッセージは消えます。

クライアントエラーがなく、このフォームを送信できる場合は、ユーザーがまだ存在していないことをデータベースに対してチェックする必要があります。もしそうであれば、私はエラーを追加している:

ModelState.AddModelError("", "User already exists") 

モデルを返すとき、エラーボックスが示されますが、何のメッセージがそこに存在していません。

@Html.ValidationSummary(true)@Html.ValidationSummary(false)に変更すると、モデルに正しく返されたというエラーメッセージが表示されます。(編集:Janのコメントがこの部分を解決しました)

問題は、すべてのクライアントの検証が複製され、2つの異なる場所に表示されることです。

また、同じ場所/ divにエラーが表示されるようにしたいと思います。今のように、2つの異なる検証の要約になります。

これはどうしてですか?

+2

これは機能するはずです(AddModelErrorとValSum(true)のキーパラメータとして空の文字列)。空の文字列をキーパラメータとして渡すのですか? – Jan

+0

ありがとう!私はそれを空にしてから編集しなかった。これで、エラーメッセージが正しく表示されます。私はまだ2つのエラーボックスが存在するという問題があります:モデルステートエラーのサマリーの1つと、あらかじめ定義されたクライアントエラーの1つ@Html.ValidationMessageFor() – Andreas

答えて

0

テキストボックスの横に設定した検証では、@Html.ValidationMessageFor(model => model.LastName)のテキストを@Html.ValidationMessageFor(model => model.LastName, "")に設定することができます。または、必要に応じて '*'を追加したい場合はその後、あなたのテキストボックスの横にメッセージが表示されません。

+0

実際には、テキストボックス。私は要約としてすべての上にそれらを持っています。これはうまくいかず、まだ2つの異なるエラーボックスがあります。 1つはモデル状態エラーを表示し、もう1つはクライアント側エラーを表示します。 – Andreas

関連する問題