首页 > 解决方案 > 未通过数据库验证生成 MVC 视图

问题描述

我首先使用带有 EF6 和数据库的 MVC 5。我有两个表,表 A 和 B,它们都有不可为空的字段。我对它们都做了相同的过程,创建了控制器和视图,但由于某种原因,为表 B 创建记录的视图的 html 不会生成客户端验证。

表 A:

CREATE TABLE [dbo].[A](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [CodA] [int] NOT NULL,
    [Volume] [decimal](15, 2) NOT NULL,
    [CreationDate] [datetime] NOT NULL,
 CONSTRAINT [A_pk] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)

表 B:

CREATE TABLE [dbo].[B](
    [ID] [smallint] IDENTITY(1,1) NOT NULL,
    [Codigo] [varchar](3) NOT NULL,
    [Iso2] [varchar](2) NOT NULL,
    [Iso3] [varchar](3) NOT NULL,
    [Designation] [nvarchar](128) NOT NULL,
 CONSTRAINT [B_pk] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)

用于在表 A 中创建记录的视图中的字段的 Html:

<input class="form-control text-box single-line" data-val="true" data-val-number="The field Volume must be a number." data-val-required="The Volume field is required." id="Volume" name="Volume" type="text" value="">

表 A 的 cshtml 创建文件中的代码:

@Html.EditorFor(model => model.Volume, new { htmlAttributes = new { @class = "form-control" } })

用于在表 B 中创建记录的视图中的字段的 Html:

<input class="form-control text-box single-line" id="Codigo" name="Codigo" type="text" value="">

表 B 的 cshtml 创建文件中的代码:

@Html.EditorFor(model => model.Iso3, new { htmlAttributes = new { @class = "form-control" } })

表 A 的创建操作的控制器

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(A a)
        {
            if(ModelState.IsValid)
            {
                db.A.Add(a);
                db.SaveChanges();
                return RedirectToAction("Index", "Backoffice");
            }

            return View(a);
        }

表 B 的创建操作的控制器

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(B b)
        {
            if (ModelState.IsValid)
            {
                db.B.Add(b);
                db.SaveChanges();
                return RedirectToAction("Index", "Backoffice");
            }

            return View(b);
        }

控制器是相同的。

在表 A 中,视图显示了不可为空字段的验证消息,而在表 B 中,它到达控制器并在 SaveChanges 方法中引发异常。

标签: c#asp.net-mvcentity-frameworkvalidationmodel-view-controller

解决方案


我认为您需要将数据验证属性添加 [Required(AllowEmptyStrings = false)]到您的类属性中。


推荐阅读