136

ModelStateを無効にするエラーのリストはどこにありますか?ModelStateオブジェクトにエラープロパティが表示されませんでした。

4

9 に答える 9

280

Visual Studioでプログラミングしている可能性があるため、このような簡単なデバッグ手順にブレークポイントを使用する可能性を利用することをお勧めします(問題がどのような場合かを理解する)。ModelState.isValidをチェックする場所の直前/場所に配置し、ModelStateにカーソルを合わせます。これで、内部のすべての値を簡単に参照して、isvalidがfalseを返す原因となるエラーを確認できます。

modelstate

于 2009-11-24T17:33:49.457 に答える
46

「エラーが 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 の場合です。

于 2009-11-24T19:06:06.807 に答える
25
bool hasErrors =  ViewData.ModelState.Values.Any(x => x.Errors.Count > 1);

またはで繰り返す

    foreach (ModelState state in ViewData.ModelState.Values.Where(x => x.Errors.Count > 0))
    {

    }
于 2009-11-24T17:30:30.133 に答える
15

バインダーがエラーメッセージなしで例外をスローすることがあります。次のスニペットを使用して例外を取得し、何が問題なのかを調べることができます。

(多くの場合、バインダーが文字列を複合型に変換しようとしている場合など)

 if (!ModelState.IsValid)
            {
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));

// Breakpoint, Log or examine the list with Exceptions.

  }
于 2011-07-06T08:35:35.790 に答える
6

ModelsState.IsValid のチェックを外してエラーにした場合、この行をコピー((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrorsして Visual Studio のウォッチ セクションに貼り付けると、エラーの内容が正確にわかります。エラーの場所を確認する時間を大幅に節約できます。

于 2018-07-17T11:53:12.570 に答える
3

コントローラーの ModelState プロパティは、実際には ModelStateDictionary オブジェクトです。ディクショナリのキーを反復処理し、IsValidField メソッドを使用して、その特定のフィールドが有効かどうかを確認できます。

于 2009-11-24T17:27:31.527 に答える