2016-02-25 17 views
0

我有一個叫做Employee的模型,它帶有一個名爲OnDuty的布爾字段。我們的業務規則只允許一名員工執勤。.Net MVC驗證只有一個checkox檢查

index頁面上,我已設置複選框,以便它們觸發更新呼叫以將員工更新爲「隨時待命」。但是,我並未使用以下我的控制器操作將其他員工設置爲off duty。我該如何去確保沒有其他員工值班?

[HttpPost] 
public JsonResult Update(Employee employee) 
{ 
    IEnumerable<Employee> onCallEmployee = _db.Employees.Where(e => e.OnCall == true); 
    foreach (Employee e in onCallEmployee) { 
     e.OnCall = false; 
     _db.Entry(e).State = EntityState.Modified; 
     _db.SaveChanges(); 
    } 
    _db.Entry(employee).State = EntityState.Modified; 
    _db.SaveChanges(); 
    return Json("Employee updated!"); 
} 
+0

這裏的問題究竟是什麼。您的代碼是否未設置其他employees.oncall爲false?活頁夾是否將發佈的employee.oncall綁定爲true?你有什麼問題。附:你可能想調用SaveChanges()只在底部而不是在foreach循環和底部。 –

+0

正確,我無法挽救所有員工。我能夠使用下面發佈的答案中的代碼更新來解決問題。感謝您的建議! – dspencer

回答

0

看來我的錯誤是由我試圖更新員工的方式造成的。我必須從onCallEmployee中排除已由功能更新的員工,因爲在嘗試保存更新時會引發錯誤(Attaching an entity of type 'Employee' failed because another entity of the same type already has the same primary key value.)。

另外,基於@ mwwallace8,建議,我從for循環中刪除了SaveChanges()調用,並在最後留下了一個調用。

[HttpPost] 
public JsonResult Update(Employee employee) 
{ 
    IEnumerable<Employee> onCallEmployee = _db.Employees.Where(e => e.OnCall == true && e.ID != employee.ID); 
    foreach (Employee e in onCallEmployee) { 
     e.OnCall = false; 
     _db.Entry(e).State = EntityState.Modified; 
    } 
    _db.Entry(employee).State = EntityState.Modified; 
    _db.SaveChanges(); 
    return Json("Employee updated!"); 
}