如何在 MVC 上执行编辑以保持某些值的唯一性?



如何在MVC中编辑,我更改了其他属性,如姓名,地址,但保留唯一的电子邮件,我之前创建的合同 模型类如下。

public class Student

{

[Required]
public int StudentId { get; set; }
[Required]
[DisplayName("Name")]
public string StudentName { get; set; }
[Required]
[DisplayName("Email")]
[Remote("IsEmailUnique", "Student", ErrorMessage = "This email already exists")]
[RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", ErrorMessage = "Please enter a valid email address")]
public string StudentEmail { get; set; }
[Required]
[DisplayName("Contact No.")]
[RegularExpression("^(?!0+$)(\+\d{1,3}[- ]?)?(?!0+$)\d{11,15}$", ErrorMessage = "Please enter valid phone no.")]
[Remote("IsContractNoUniue", "Student", ErrorMessage = "This Reg.No already exists")]
public string StudentContactNo { get; set; }
[Required]
[DisplayName("Date")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString ="{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime RegistrationDate
{
get { return (defaultDate == DateTime.MinValue) ? DateTime.Now : defaultDate; }
set { defaultDate = value; }
}
public string Address { get; set; }
[Required]
public int DepartmentId { get; set; }
[Required]
[DisplayName("Reg.No")]
[Remote("IsRegNoUnique", "Student", ErrorMessage = "This Reg.No already exists")]
public string StudentRegistrationNumber { get; set; }
public Department Department { get; set; }
public List<StudentEnrolledCourse> StudentEnrolledCourses { get; set; }

用于编辑的控制器也在这里

public ActionResult Edit([Bind(Include = "StudentId,StudentName,StudentEmail,StudentContactNo,RegistrationDate,Address,DepartmentId,RegistrationNumber")] Student student)
{
if (ModelState.IsValid)
{
db.Entry(student).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.DepartmentId = new SelectList(db.Departments, "DepartmentId", "DepartmentName", student.DepartmentId);
return View(student);
}

对于这个问题可以做些什么?

您应该创建 StudentForUpdate,然后您的更新操作方法将如下所示

public ActionResult Edit([Bind(Include = "StudentId,StudentName,StudentContactNo,RegistrationDate,Address,DepartmentId,RegistrationNumber")] StudentForUpdate student)
{
if (ModelState.IsValid)
{
db.Entry(student).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.DepartmentId = new SelectList(db.Departments, "DepartmentId", "DepartmentName", student.DepartmentId);
return View(student);
}

在这种情况下,电子邮件将永远不会更改。

最新更新