C# 在MVC中编辑时出现异常

C# 在MVC中编辑时出现异常,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在尝试使用实体框架在MVC中编辑一个员工的记录。代码如下: 行动 看法 @使用(Html.BeginForm(“EditEmployee”,“BootStrap”,FormMethod.Post,new{@class=“form horizontal”,role=“form”})) { &时代; 编辑员工记录 //代码的其余部分 但我得到了一个错误: System.Core.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理 此

我正在尝试使用实体框架在MVC中编辑一个员工的记录。代码如下:

行动 看法
@使用(Html.BeginForm(“EditEmployee”,“BootStrap”,FormMethod.Post,new{@class=“form horizontal”,role=“form”}))
{
&时代;
编辑员工记录
//代码的其余部分
但我得到了一个错误:

System.Core.dll中发生“System.InvalidOperationException”类型的异常,但未在用户代码中处理

此代码在其他地方使用时工作正常。

似乎此代码

employeeTbl objEmployee = empEntities.employeeTbls.First(m => m.empId == Id);
正在返回null,因此赋值将导致该异常

objEmployee.empName = emp2.EmployeeListDetail.Name;
objEmployee.empAge = emp2.EmployeeListDetail.Age;
objEmployee.empDob = emp2.EmployeeListDetail.Dob;
尝试使用FirstOrDefault

employeeTbl objEmployee = empEntities.employeeTbls.FirstOrDefault(m => m.empId == Id);
if(objEmployee==null)
   return HttpNotFound("No record found.");

objEmployee.empName = emp2.EmployeeListDetail.Name;
objEmployee.empAge = emp2.EmployeeListDetail.Age;
objEmployee.empDob = emp2.EmployeeListDetail.Dob;

是否可能将id参数设置为默认值-0或设置为不在db中的错误id? 在您得到错误的地方,它是最有意义的。跟随调试器。 您可以使用此代码

[HttpPost]
            public ActionResult EditEmployee(EmployeeList2 emp2, int Id = 0)
            {
                empEntities = new EmployeeDBEntities2();
                employeeTbl objEmployee = empEntities.employeeTbls.FirstOrDefault(m => m.empId == Id);
                if(objEmployee!= null)
                {
                    objEmployee.empName = emp2.EmployeeListDetail.Name;
                    objEmployee.empAge = emp2.EmployeeListDetail.Age;
                    objEmployee.empDob = emp2.EmployeeListDetail.Dob;
                 }
    return RedirectToAction("EmployeeList2", "Employee");   
}    

请注意,如果“id”为0,则“id”的查看/路由有问题,我们需要查看代码以帮助

在EditEmployee操作方法中,emp2和id参数的值是什么?emp2是一个员工列表,包含给定id上的一名员工的姓名、年龄等,这些员工是否已填充(emp2和id)?是的,它们正在被数据填充。正如我已经提到的,相同的代码在另一个地方可以完美地工作,id值不在表中。当您首先()在null上,您会得到异常。这可能是原因。请在下面的行employeeTbl objeemployee=emperities.employeeTbls.FirstOrDefault(m=>m.empId==Id)中放置一个断点,并让我们知道我得到的值;如果我使用FirstOrDefault,我会得到相同的错误,但在下一行中,表示objEmployee为nullyes,你是对的。我不关心Id为0,emp2充满了数据,所以会出现异常,但为什么Id不是来自viewid,因为:您没有正确地从视图传输它,或者您正在使用不同的路由。如果您有emp2参数中的id,然后使用它,如果没有,则发布您的视图和路由配置。我是MVC新手,因此我可以知道如何从视图传递id,实际上我使用我的视图有两个目的,一个用于显示记录,另一个用于编辑记录(通过使用引导弹出窗口),请尝试这样做:“employeeTbl OBJEEMPLOYEE=emperities.employeeTbls.FirstOrDefault”(m=>m.empId==emp2.Id);“通常这就是从编辑页面传输Id的方式。我不关心Id是否为0,emp2是否充满了数据,所以会出现异常,但为什么Id不是来自视图不确定,因为我们看不到您视图的实际代码,您需要发布实际视图,以便其他人也能看到。
employeeTbl objEmployee = empEntities.employeeTbls.FirstOrDefault(m => m.empId == Id);
if(objEmployee==null)
   return HttpNotFound("No record found.");

objEmployee.empName = emp2.EmployeeListDetail.Name;
objEmployee.empAge = emp2.EmployeeListDetail.Age;
objEmployee.empDob = emp2.EmployeeListDetail.Dob;
[HttpPost]
            public ActionResult EditEmployee(EmployeeList2 emp2, int Id = 0)
            {
                empEntities = new EmployeeDBEntities2();
                employeeTbl objEmployee = empEntities.employeeTbls.FirstOrDefault(m => m.empId == Id);
                if(objEmployee!= null)
                {
                    objEmployee.empName = emp2.EmployeeListDetail.Name;
                    objEmployee.empAge = emp2.EmployeeListDetail.Age;
                    objEmployee.empDob = emp2.EmployeeListDetail.Dob;
                 }
    return RedirectToAction("EmployeeList2", "Employee");   
}