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

时间:2018-09-28 17:34:56

标签: c# asp.net

如何在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);
}

该问题该怎么办?

1 个答案:

答案 0 :(得分:1)

您应该创建StudentForUpdate,然后您的更新Action方法将类似于

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);
}

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