.Net MVC验证只检查了一个checkox

时间:2016-02-25 16:59:43

标签: validation asp.net-mvc-5

我有一个名为Employee的模型,其中一个名为OnDuty的布尔字段。我们的业务规则只允许一名员工值班。

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

1 个答案:

答案 0 :(得分: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!");
}