首先,需要在属性上添加特性
public partial class Student
{
public int Id { get; set; }
[Required]
[MinLength(2, ErrorMessage = "名称长度不能小于2个字符")]
[MaxLength(6, ErrorMessage = "名称长度不能大于6个字符")]
public string Name { get; set; }
[Required]
[Range(0, 150, ErrorMessage = "年龄必须在0-150范围内")]
public int Age { get; set; }
public string Sex { get; set; }
}
在生成HTML代码时,会根据属性的特性生成对应的验证规则
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
生成的HTML代码
<input class="form-control text-box single-line"
data-val="true" data-val-maxlength="名称长度不能大于6个字符"
data-val-maxlength-max="6" data-val-minlength="名称长度不能小于2个字符"
data-val-minlength-min="2" data-val-required="Name 字段是必需的。"
id="Name" name="Name" type="text" value="" />
<span class="field-validation-valid text-danger"
data-valmsg-for="Name" data-valmsg-replace="true"></span>
<input class="form-control text-box single-line"
data-val="true" data-val-number="字段 Age 必须是一个数字。"
data-val-range="年龄必须在0-150范围内"
data-val-range-max="150" data-val-range-min="0"
data-val-required="Age 字段是必需的。"
id="Age" name="Age" type="number" value="" />
<span class="field-validation-valid text-danger"
data-valmsg-for="Age" data-valmsg-replace="true"></span>
最终的校验还是根据jQuery Validate
所以要引入脚本
@Scripts.Render("~/bundles/jqueryval")
在提交数据时,验证ModelState.IsValid
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name,Age,Sex")] Student student)
{
if (ModelState.IsValid)
{
db.Student.Add(student);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(student);
}
在EF设计器中,每当模型信息改变时,就要重新生成模型,重新生成后类属性上的所有特性都会被清除
怎么解决这个问题呢?
可以使用MetadataType特性:指定要与数据模型类关联的元数据类。
新添加一个类StudentValidate,属性与Student的都相同
public class StudentValidate
{
public int Id { get; set; }
[Required]
[MinLength(2, ErrorMessage = "名称长度不能小于2个字符")]
[MaxLength(6, ErrorMessage = "名称长度不能大于6个字符")]
public string Name { get; set; }
[Required]
[Range(0, 150, ErrorMessage = "年龄必须在0-150范围内")]
public int Age { get; set; }
public string Sex { get; set; }
}
新建一个类与Student同名,并添加partial关键字,在Student添加MetadataType特性
//让 Student 共享了 StudentValidate 元数据信息
[MetadataType(typeof(StudentValidate))]
public partial class Student
{
}