TextBoxFor()不生成validation标记

我有一个SQL Server 2012,其中我有AWARD表,有两列TITLE和MONTH。 TITLE是varchar(256),不能为NULL。 MONTH是int,可以为NULL。

使用VS2012 Ultimate和EF 5.0.0,MVC4应用程序中的TextBoxFor帮助程序不会为上面的TITLE列生成validation(data-val="required" and data-val-required="required message") ,但是在同一视图中,MONTH正在获得正确的validation标记。 .edmx设计器确实显示TITLE是NonNullable,BUTT,自动生成的AWARD.cs文件没有TITLE列的[Required]属性。

我该怎么办?

 @model MyProject.Models.AWARD @{ ViewBag.Title = "Add Award"; Layout = "~/Views/Shared/_EditorLayout.cshtml"; } @using (Html.BeginForm()) { @Html.ValidationSummary(true) 
Add Award
@Html.LabelFor(model => model.TITLE) @Html.TextAreaFor(model => model.TITLE)
@Html.ValidationMessageFor(model => model.TITLE)
@Html.LabelFor(model => model.MONTH) @Html.DropDownListFor(model => model.MONTH, new SelectList(MyProject.Models.Helpers.Months, "key","value"), "[Not Selected]")
@Html.ValidationMessageFor(model => model.MONTH)
@Html.ActionLink("Cancel", "Index", null, new { @class = "cancel-button" })
}

您不应该将视图直接绑定到数据映射实体。 您应该创建视图模型类来包装传递给视图的数据,然后从控制器填充数据对象。

然后,您可以在视图模型上执行所需的validation,而不会影响生成的映射类。

模型

 public class AwardViewModel { [Required, StringLength(30)] public string Title { get; set; } .... } 

视图

 @model AwardViewModel @using (Html.BeginForm()) { @Html.EditorFor(m => m.Title) @Html.ValidationMessageFor(m => m.Title) ... } 

调节器

 [HttpPost] public ActionResult Create (AwardViewModel model) { /* Create new AWARD in entity context, populate with relevant fields from model and commit. */ }