0

我有一个看起来像这样的控制器:

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

我添加了ViewBag.Msg记录控制器的行为。如果表单无效,它应该根据模型验证器显示正确的错误消息,但它不起作用,因为“错误”字符串显示在视图上。

我如何跟踪错误。根据文档ModelState有一个属性Errors,但视觉工作室说这不是真的。

是否有另一种方法记录错误以及它可能是什么。

编辑:

我已经有了@Html.ValidatorSumary(true),这就是这个案例的奇怪之处,我知道这ModelState是无效的,因为这ViewBag.Msg条线,但它没有显示任何东西。

编辑2

碰巧我对这样的一个助手有错误的价值

@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 回答