2009-03-26 14 views
21

ModelStoreが無効であるため、ModelStoreが無効なため、ModelStoreが存在しないため、無効化されたモデルが見つかりません。 ModelErrorを追加していない場合、モデル状態を無効にしたものを特定する最も簡単な方法は何ですか?ViewData.ModelState.IsValidが偽になる原因

答えて

36

asp.net mvc source codeを参照すると、ModelStateDictionaryのIsValidプロパティは、Valuesプロパティに保持されているModelState ICollectionにエラーがあるかどうかによってtrueまたはfalseを返すだけです。

あなたはこのようなメッセージと例外を含むすべてのエラーを見つけることができるはずです。

foreach(var modelStateValue in ViewData.ModelState.Values) 
{ 
    foreach(var error in modelStateValue.Errors) 
    { 
     // Do something useful with these properties 
     var errorMessage = error.ErrorMessage; 
     var exception = error.Exception; 
    } 
} 
+0

これは素晴らしいです! +1 – TheOptimusPrimus

4

私は同様の問題に出くわしましたと、スティーブが提供ルーチンの同じ種類を使用してきた、例外を発見しましたHtml.ValidationSummaryに入っていない既定のモデルバインダーのどこかに投げ込まれていました(非はっきりと)。

私が持っていた特に問題は、 "true"と "false"の代わりに "1"と "0"の値を持つ "Yes"または "No"これらの値をブール値(私のエンティティのメンバーが期待していた値)に変換しようとすると、0がブール値に対して有効な値ではないことを示しています。

私の選択が無効であるという素晴らしいメッセージが生成されることを期待しましたが、代わりに私は空のValidationSummaryを扱いました。それは例外が飲み込まれたようだ! (そして今、将来私が見ているものです)これはMSにバグとして提出されるべきでしょうか?

+0

これについての回答がありますか? –

+0

これは数年前のことでしたが、私はその問題を思い出しましたが、私は答えを思い出すことはできません。私は、私が自分のバリデーションを実行するための特別なケースコードを書いてしまったかもしれないと考えています。これはデフォルトのモデルバインダーにもう依存しません。 (つまり、Request.Formを直接チェックして、自分自身でエラーを見つけ出すことは、ValidationSummaryが必ずしも役立たないとは限りません)。これはMVC 2に戻ってしまいました。 – Funka

関連する問題