试图允许null,但是…“可空”对象必须有一个值
本文关键字:对象 可空 有一个 null 但是 | 更新日期: 2023-09-27 17:49:34
我试图在我的下拉列表中允许null,在我的数据库表中,我已经设置了允许null的特定字段,这是int,但是当我运行代码时,我得到错误说"空对象必须有一个值",我认为问题可能是在ModelState。
控制器[HttpPost]
public ActionResult Edit(Student student)
{
if (ModelState.IsValid)
{
db.Entry(student).State = EntityState.Modified;
db.SaveChanges();
Loan w = new Loan()
{
StudentID = student.StudentID,
ISBN = student.ISBN.Value,
};
db.Loans.Add(w);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ISBN1 = new SelectList(db.Books, "ISBN", "Titulli", student.ISBN);
return View(student);
}
当您试图获取可空对象的值时,您将获得此错误,该对象没有值。如果Loan.ISBN
属性不可为空,那么您应该为该属性提供默认值
ISBN = student.ISBN.HasValue ? student.ISBN.Value : defaultValue
// or ISBN = student.ISBN ?? defaultValue
// or ISBN = student.ISBN.GetValueOrDefault()
如果Loan.ISBN
属性是可空的,那么简单地分配student.ISBN
而不访问可空类型的Value
ISBN = student.ISBN
执行相同任务的最短方法,使用合并操作符,??,如下所示:
ISBN = student.ISBN ?? defaultValue;
合并运算符是这样工作的:如果第一个值(左边)为null,那么c#计算第二个表达式(右边)。
当您试图访问Nullable
类型的Value
属性时,当HasValue
为false时,会发生此异常。请参阅MSDN上的可空类型。首先检查这一行
ISBN = student.ISBN.Value
查看ISBN
是否为空。您可能想将这一行更改为
ISBN = student.ISBN.GetValueOrDefault();
我有一个对象的列表与双精度?属性。在接收到控制器的请求后,我无法将列表发送到服务类,并且我得到错误System。InvalidOperationException: '可空对象必须有一个值。'。我将空值更改为999999999(默认值),并且在服务方法中忽略999999999值并将它们插入数据库。
[HttpPost]
[Route("api/TestReader/UpdateStudentsGradeFromExcel")]
public IHttpActionResult UpdateStudentsGradeFromExcel(List<TestReaderStudentsVM> model)
{
foreach (var item in model)
{
if (item.Grade == null)
item.Grade = 999999999;
}
tblTestReaderManager.UpdateStudentsGradeFromExcel(model);
return Ok();
}
In service method:
foreach (var item in model.Where(m => m.Grade != 999999999))
{
// insert model items to the db
}