2012-12-27 51 views
11

我想允許在我的下拉列表中,在我的數據庫表中的空值我已經設置允許空值爲特定的字段是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); 
    } 
+0

'Loan'類的''''屬性是否可以爲空? –

+0

*哪一個可爲空的對象應該有一個值? 「ModelState」何時被認爲是有效的?在代碼的哪一行你會得到那個錯誤? –

+0

是的,但現在我第一次得到這個錯誤,但如果我回去看看列表中的變化已保存,我現在不知道現在發生了什麼 – ilirvg

回答

18

您正在嘗試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 
+0

如果您將'Value'屬性設置爲'null',那麼爲什麼HasValue不是真的?看起來像,因爲它是明確設置的,所以它有一個值,那個值是'null'。 – toddmo

+0

@toddmo [HasValue](https://msdn.microsoft.com/en-us/library/sksw8094(v = vs.110).aspx)指示可爲空的對象是否具有其基礎類型*的有效值。 'null'對'struct'來說不是有效值,所以'HasValue'應該返回false。還要記住,'Value'的類型爲'T',它是'struct'(同樣,你不能將null賦值給value類型)甚至更多--''''值是隻讀屬性。 –

4

,就會出現此異常時嘗試訪問 Nullable類型的屬性,當HasValue爲false時。請參閱MSDN上的Nullable Types。所以首先檢查這一行

ISBN = student.ISBN.Value 

看看ISBN是否不爲空。您可能希望此行更改爲

ISBN = student.ISBN.GetValueOrDefault(); 
2

執行相同任務的捷徑,利用聚結操作,??,如下圖所示:

ISBN = student.ISBN ?? defaultValue; 

聚結操作是這樣的:如果第一個值(左側)爲空,則C#評估第二個表達式(右側)。

相關問題