数据批注在 MVC 4 中未显示错误消息

Data annotations not displaying error message in MVC 4

本文关键字:显示 错误 消息 MVC 数据      更新时间:2023-09-26

我在MVC 4中有一个简单的cshtml页面,如下所示:

@model  MvcApplication2.ViewModels.UserViewModel
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
        <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    </head>
    <body>
        <div>
              @using (Html.BeginForm("Add", "User", FormMethod.Post))
              {
                @Html.ValidationMessageFor(m => m.FirstName)
                @Html.TextBoxFor(m => m.Ime)
                <br />
                @Html.ValidationMessageFor(m => m.LastName)
                @Html.TextBoxFor(m => m.LastName)
                <br />
                <input id="btnSubmit" type="submit" value="Add user" />
              }
        </div>
    </body>
    </html>

这是我的UserViewModel类:

   public class UserViewModel
    {
        [Required(ErrorMessage = "This field is required.")]
        public string FirstName;
        [Required(ErrorMessage = "This field is required.")]
        public string LastName;        
    }

这是控制器中的操作"添加":

  [HttpPost]
        public ActionResult Add(User s)
        {
            if(ModelState.IsValid)
            {
                Connection.dm.User.Add(s);
                Connection.dm.SaveChanges();
            }
          return RedirectToAction("Index");
        }

这里的问题是,如果用户没有在 2 个文本框字段中输入内容,我根本没有收到任何错误消息......会是什么?

参考使用 try.. catch.. 块,你可以做这样的事情:

[HttpPost]
    public ActionResult Add(User s)
    {
        if(ModelState.IsValid)
        {
            try{
                Connection.dm.User.Add(s);
                Connection.dm.SaveChanges();
            }
            catch(NullReferenceException)
            {
                ModelState.AddModelError("Ime", "Please enter something"); // for the first name validation
                return View(s);
        }
      return RedirectToAction("Index");
    }

或者你可以使用一些条件逻辑,比如:

[HttpPost]
    public ActionResult Add(User s)
    {
        if(ModelState.IsValid)
        {
            if(string.IsNullOrWhiteSpace(s.Ime)
            {
                ModelState.AddModelError("Ime", "Please enter something");
                return View(s);
            }
            else
            {
            Connection.dm.User.Add(s);
            Connection.dm.SaveChanges();
            }
        }
      return RedirectToAction("Index");
    }