0

次のようなコントローラーがあります。

if (ModelState.IsValid)
            {
               ...
            }
            else
            {
                ViewBag.Msg = "error";
                return View();
            }

ViewBag.Msgコントローラーの動作をログに記録するために を追加しました。フォームが有効でない場合、モデル バリデータに従って適切なエラー メッセージが表示されるはずですが、「エラー」文字列がビューに表示されているため、機能していません。

エラーを追跡するにはどうすればよいですか。ドキュメントModelStateによるとプロパティErrorsがありますが、ビジュアルスタジオはこれは真実ではないと言っています。

エラーをログに記録する別の方法はありますか。

編集:

私はすでに持っています、それは@Html.ValidatorSumary(true)このケースについての奇妙なことです、私はそれが行ModelStateのために有効ではないことを知っていますViewBag.Msgが、それは何かを示していません.

編集2

このようなヘルパーの1つに間違った値があったことが起こりました

@Html.RadioButtonFor(x => x.BoolField, 1)

そしてモデル

public Nullable<Bool> boolField { get; set; }
4

2 に答える 2

3

ビューにモデル エラーを表示するには、モデルをビューに戻す必要があります。モデル エラーをログに記録する場合は、ViewData.ModelState.Valuesコレクションをチェックしてエラーを確認できます。

[Httpost]
public ActionResult Create(User model)
{
   if(ModelState.IsValid)
   {
     //save and redirect
   }
   else
   {
     foreach (var modelStateValue in ViewData.ModelState.Values)
     {
       foreach (var error in modelStateValue.Errors)
       {               
            var errorMessage = error.ErrorMessage;
            var exception = error.Exception;
           // You may log the errors if you want
       }
     }
   }         
   return View(model);
 }
}
于 2012-09-11T15:56:56.347 に答える
0

お役に立てれば。

 public ActionResult SomeAction(SomeModel model)
            {
                if (!ModelState.IsValid)
                {
                    // validation error.. display model with error messages

                    return PartialView("partialview", model);
                }
                try
                {
                    //success
                    return Json(new { success = true });
                }
                catch (Exception ex)
                {
                    // show error in ValidationSummary

                    ModelState.AddModelError("", ex.Message);
                    return PartialView("partialview", model);
                }
于 2012-09-11T16:03:21.277 に答える