【发布时间】:2019-05-17 16:25:16
【问题描述】:
我首先使用带有 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
)
视图中的字段的 HTML 以在表 A 中创建记录:
<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" } })
视图中的字段的 HTML 以在表 B 中创建记录:
<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-mvc entity-framework validation model-view-controller