ModelStateを無効にするエラーのリストはどこにありますか? ModelStateオブジェクトにerrorsプロパティが表示されませんでした。
「エラー0とIsValid == falseにできるか」について: https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#からのMVCソースコードL37-L41
public bool IsValid {
get {
return Values.All(modelState => modelState.Errors.Count == 0);
}
}
今、それはできないように見えます。まあ、それはASP.NET MVC v1のことです。
おそらくVisual Studioでプログラミングしているので、このような簡単なデバッグ手順にブレークポイントを使用する可能性を活用することをお勧めします(問題がどのようなものであるかを把握する)。 ModelState.isValidを確認してModelStateの上にマウスを移動する場所にそれらを配置します。これで、内部のすべての値を簡単に参照して、isvalidがfalseを返す原因となるエラーを確認できます。
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);
またはで繰り返す
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
{
}
コントローラーのActionResultに以下のコードを貼り付け、この時点でデバッガーを配置します。
var errors = ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => new { x.Key, x.Value.Errors })
.ToArray();
バインダーがエラーメッセージなしで例外をスローする場合があります。次のスニペットを使用して例外を取得し、何が間違っているかを見つけることができます。
(多くの場合、バインダーが文字列を複合型などに変換しようとしている場合)
if (!ModelState.IsValid)
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
// Breakpoint, Log or examine the list with Exceptions.
}
ModelsState.IsValidのチェックを削除してエラーにすると、この行((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
をコピーしてVisual Studioの監視セクションに貼り付けると、エラーの内容が正確にわかります。エラーの場所を確認する時間を大幅に節約できます。
コントローラーのModelStateプロパティは、実際にはModelStateDictionaryオブジェクトです。辞書のキーを反復処理し、IsValidFieldメソッドを使用して、その特定のフィールドが有効かどうかを確認できます。
ちょうど私に起こったように-これは、フォームを更新せずに必要なプロパティをモデルに追加するときにも発生する可能性があります。この場合、ValidationSummaryはエラーメッセージをリストしません。