ModelStateを無効にするエラーのリストはどこにありますか?ModelStateオブジェクトにエラープロパティが表示されませんでした。
9 に答える
Visual Studioでプログラミングしている可能性があるため、このような簡単なデバッグ手順にブレークポイントを使用する可能性を利用することをお勧めします(問題がどのような場合かを理解する)。ModelState.isValidをチェックする場所の直前/場所に配置し、ModelStateにカーソルを合わせます。これで、内部のすべての値を簡単に参照して、isvalidがfalseを返す原因となるエラーを確認できます。
「エラーが 0 で、IsValid == false である可能性があります」について: https://github.com/Microsoft/referencesource/blob/master/System.Web/ModelBinding/ModelStateDictionary.cs#L37-L41の MVC ソース コードを次に示します。
public bool IsValid {
get {
return Values.All(modelState => modelState.Errors.Count == 0);
}
}
今、それはありえないようです。それは ASP.NET MVC v1 の場合です。
bool hasErrors = ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);
またはで繰り返す
foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
{
}
バインダーがエラーメッセージなしで例外をスローすることがあります。次のスニペットを使用して例外を取得し、何が問題なのかを調べることができます。
(多くの場合、バインダーが文字列を複合型に変換しようとしている場合など)
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 メソッドを使用して、その特定のフィールドが有効かどうかを確認できます。