我试图在我的下拉列表中允许空值,在我的数据库表中,我为该特定字段设置了允许空值,但是当我运行代码时,我得到错误,说“可以为空的对象必须有值” ,我认为问题可能出在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);
}
答案 0 :(得分:20)
尝试get value of nullable对象时遇到此错误,该对象没有值。如果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
答案 1 :(得分:5)
执行相同任务的最短路径,使用coalesce运算符,??,如下所示:
ISBN = student.ISBN ?? defaultValue;
coalesce运算符的工作方式如下:如果第一个值(左侧)为null,则C#计算第二个表达式(右侧)。
答案 2 :(得分:4)
当Value
为false时,如果您尝试访问Nullable
类型的HasValue
属性,则会发生此异常。请参阅MSDN上的Nullable Types。所以首先检查这一行
ISBN = student.ISBN.Value
查看ISBN
是否为空。您可能希望将此行更改为
ISBN = student.ISBN.GetValueOrDefault();