Попытка разрешить nulls, но... "Nullable object должен иметь значение"
Я пытаюсь разрешить nulls в моем раскрывающемся списке, в моей таблице базы данных, которую я установил, разрешает null для этого конкретного поля, которое является int, но когда я запускаю код, я получаю сообщение об ошибке: "Nullable object должен иметь значение", Я думаю, проблема может быть в 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);
}
Ответы
Ответ 1
Вы получаете эту ошибку при попытке получить значение объекта с возможностью nullable, который не имеет значения. Если свойство Loan.ISBN
не имеет значения NULL, вы должны указать значение по умолчанию для этого свойства
ISBN = student.ISBN.HasValue ? student.ISBN.Value : defaultValue
// or ISBN = student.ISBN ?? defaultValue
// or ISBN = student.ISBN.GetValueOrDefault()
Если свойство Loan.ISBN
имеет значение NULL, просто присвойте student.ISBN
без доступа к Value
типа с нулевым значением
ISBN = student.ISBN
Ответ 2
Это исключение возникает, когда вы пытаетесь получить доступ к свойству Value
типа Nullable
, когда HasValue
является ложным. См. Nullable Types в MSDN. Поэтому прежде всего проверьте эту строку
ISBN = student.ISBN.Value
чтобы увидеть, не имеет ли значение ISBN
null. Вы можете изменить эту строку на
ISBN = student.ISBN.GetValueOrDefault();
Ответ 3
Самый короткий способ выполнить одну и ту же задачу с помощью оператора coalesce, показанного ниже:
ISBN = student.ISBN ?? defaultValue;
Оператор coalesce работает следующим образом: если первое значение (левая сторона) равно NULL, тогда С# оценивает второе выражение (правая сторона).