12

JSON を使用してフォームからデータを投稿し、ModelState.isValid() が false を返す場合、すべての受信データに WriteLine を配置すると、データに関してすべてが正常に見えます。モデル状態エラーを表示して、何が検証されていないかを確認する方法はありますか? この正確なコードは他のモデルでも問題なく動作します

[HttpPost]
public ActionResult mobileCreateAction(Trip trip)
{
    if (ModelState.IsValid)
    {
        System.Diagnostics.Debug.WriteLine("saving");
        DB.Trips.Add(trip);
        DB.SaveChanges();
        return Json(new
        {
            success = true,
            msg = "Success saving trip"
        });
    }
    else
    {
        System.Diagnostics.Debug.WriteLine("invalid model state");
        return Json(new
        {
            success = false,
            msg = "Error saving trip"
        }, JsonRequestBehavior.AllowGet);
    }  
}

ありがとう

4

3 に答える 3

34

モデル状態のエラーのリストを取得するには:

var errors = ModelState
    .Where(x => x.Value.Errors.Count > 0)
    .Select(x => new { x.Key, x.Value.Errors })
    .ToArray();

次に、この行にブレーク ポイントを置き、errors変数を調べます。モデルのプロパティとそれぞれのエラーのリストが表示されます。

于 2011-04-01T08:32:18.720 に答える
2

ModelState.Values コレクションでエラーを見つけることができます。すべての値には、そのプロパティのすべてのモデル エラーを含む Errors コレクションがあります。

var errors = from v in ModelState.Values 
             where v.Errors.Count > 0 
             select v.Errors;
于 2011-04-01T08:41:16.317 に答える
0

SO投稿

@Darinの回答に基づいて、上記のリンク先の投稿は、「why」メッセージを表示するために必要なコードを提供します。

 foreach (var obj in ModelState.Values)
            {
                foreach (var error in obj.Errors)
                {
                    if (!string.IsNullOrEmpty(error.ErrorMessage))
                        System.Diagnostics.Debug.WriteLine("ERROR WHY = " + error.ErrorMessage);
                }
            } 
于 2012-05-04T20:48:32.727 に答える