首先,在您的控制器中确保您使用ModelState.IsValid
进行验证。比较常见的错误之一是使用HttpContext.Current
而不是ModelState.IsValid
来验证。具体代码示例如下:
[HttpPost]
public ActionResult Create(Student student)
{
if (ModelState.IsValid)
{
db.Students.Add(student);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(student);
}
如果您的控制器存在嵌套属性的复杂模型,则需要手动调用验证器,以确保属性级别的验证器在模型的层次结构中正确触发。例如:
[HttpPost]
public ActionResult Create(Course course)
{
ValidateCourse(course);
if (ModelState.IsValid)
{
db.Courses.Add(course);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(course);
}
private void ValidateCourse(Course course)
{
if (course.InstructorID == null)
{
ModelState.AddModelError("InstructorID", "The instructor field is required.");
}
...
}
您还可以检查自定义的模型验证器进行排除。确保您的验证器正确设置错误消息并将其添加到模型状态中,如下所示:
public class StudentMetadata
{
[Required(ErrorMessage = "The first name field is required.")]
public string FirstName { get; set; }
[StringLength(50, MinimumLength = 2, ErrorMessage = "The last name must be between 2 and 50 characters.")]
public string LastName { get; set; }
}
[MetadataType(typeof(StudentMetadata))]
public partial class Student
{
// Here you can add custom validation rules for Student
// e.g. [Compare("Email", ErrorMessage = "The email and confirm email must match.")]
}
[HttpPost]
public ActionResult Create(Student student)
{
if (ModelState.IsValid)
{
db.Students.Add(student);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(student);
}