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) }
您不应该将视图直接绑定到数据映射实体。 您应该创建视图模型类来包装传递给视图的数据,然后从控制器填充数据对象。
然后,您可以在视图模型上执行所需的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. */ }