2012-02-03 6 views
2

私はこの動作に混乱しています:MVC 3クライアント側の検証でValidationAttributesを捕捉できますが、他にはありませんか?

私はすぐに使えるMVC3アプリを持っています。足場テンプレートが私に与えるものから、私は実際にカスタマイズをしていません。

web.configでは、clientsidevalidationenabledとunobtrusivevalidationの両方がtrueです。

私は必要注釈、正規表現を使用してStringLengthのと1を使用したものを使用して一つのフィールドを持つクラスを持っています。オブジェクトを編集しているとき、StringLength & RegexでマークされたプロパティのテキストボックスはUIですぐに問題を報告しますが、Requiredのテキストボックスは表示されません。

私がSAVEを押した場合、「Model.IsValid」はコントローラーであり、必須ではなく、テキストボックスの横にUIエラーメッセージが表示されます。

ページのソースを表示すると、必要なプロパティのマークアップに、邪魔されない検証によって生成されたdataval-reqおよびその他の関連する属性が含まれていることがわかります。

これが期待どおりの動作ですか?もしそうなら、理由は何ですか?そうでない場合は、どうしたらいいですか?

ありがとうございます! :)

+0

フィールドが記入されていなくても、コントローラー内のアクションにページがポストされていますか? 必須のフィールドに入力し、別のフィールドにタブを移動して元のフィールドの内容を削除するとどうなりますか? – Mike

+0

コードを投稿してください。 –

+0

@Beavis ...あなたの答えの下で応答します...;) –

答えて

1

私はこの振る舞いの底を知りました。ちょうどキーボードをもう少し叩くだけです。期待通りです。作成ビューでは、動作は@Beavisで説明されています。編集ビューでは、目立たない検証によって、SAVEを最初に試行する前に、必要なプロパティがタブで検証されることを防ぎます。 SAVEはUIの検証を行い(ポストバックは発生しません)、プロパティの横にエラーメッセージを表示します。私が最初にセーブしたら、そのプロパティはタブ移動に反応します。だから私はそれを有効にすると、メッセージはタブで消えます。テキストボックスの内容を消去すると、メッセージがタブに再び表示されます。

皆様のご協力ありがとうございます。

+0

私はこれを1つの文字列の長さも同様に使用することが1つの 'ハック'だと思いますか?ここで興味深い行動を知っておいてよかった。 –

1

ページがサーバーにポストバックされていない限り、これは正しい動作でなければなりません。必要なクライアント検証は、次の場合にのみ実行されます。

  1. データを入力せずにサーバーに投稿しようとしました。
  2. テキストボックスにデータを入力してから削除します。

これ以外の場合は、エラーメッセージが表示されます。

+0

ahhh ...私は#2を作成ビューで得るので、本当に有用な情報です。ありがとう。面白いことに、私が有効なデータで始まって削除した編集ビューでは、まったく起こらない。編集ビューではどうすればよいですか?ただ#1だけ...何があっても? –

+0

@JulieLerman良い質問です。残念ながら私は試してみる前にVSを持っていません。私は編集に同じ方法で旅行するために必要なフィールドを期待しています。データを削除してから別のフィールドに移動しようとしましたか? – Mike

+0

私はそれをやりとりして、フィールド内外に移動するためにさまざまなことをしました。ハイパースペースとバックスペースの対比も試みました。 Oddddddd。 ;) –

関連する問題