2012-12-27 5 views
11

私のデータベーステーブルのドロップダウンリストにNULLを許可しようとしています。私は "Nullableオブジェクトは値を持たなければならない"というエラーを受け取るコードを実行します。問題はModelStateにある可能性があります。値を持っていないget value of nullable対象にしようとするときに、このエラーを取得しているnullを許可しようとしていますが... "Nullableオブジェクトには値が必要です"

コントローラ

[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'クラスの' ISBN'プロパティはヌル入力可能ですか? –

+0

* null可能なオブジェクトには値が必要ですか? 'ModelState'はいつ有効であると考えられますか?コードのどの行にエラーが表示されますか? –

+0

はい、それは初めてですが、エラーが発生しましたが、もし私が戻ってリストに変更が保存されていれば、今は何も起こっていません。 – ilirvg

答えて

18

Loan.ISBNプロパティがNULL可能である場合には、単にValue

NULL可能タイプの
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可能オブジェクトがその基になる型*の有効な値を持つかどうかを示します。 'null'は' struct'のための有効な値ではありませんので、 'HasValue'はその意図によってfalseを返さなければなりません。また、 'Value'は' struct'型の 'T'型であり、値型にnullを代入することはできません。さらに、' Value'は読み込み専用のプロパティです。 –

4

にアクセスせずにstudent.ISBNを割り当てるときLoan.ISBNプロパティがNULL可能でない場合、あなたはそのプロパティに対して

ISBN = student.ISBN.HasValue ? student.ISBN.Value : defaultValue 
// or ISBN = student.ISBN ?? defaultValue 
// or ISBN = student.ISBN.GetValueOrDefault() 

をデフォルト値を提供する必要があり、この例外が発生しますHasValueがfalseの場合はValueプロパティのNullableにアクセスしてください。 MSDNのNullable Typesを参照してください。したがって、まずこの行を確認してください

ISBN = student.ISBN.Value 

ISBNがnullでないかどうかを確認してください。あなたは、以下に示す、??、

ISBN = student.ISBN.GetValueOrDefault(); 
2

に合体演算子を使用して、同じタスクを実行するための最短の道を、この行を変更することもできます。

ISBN = student.ISBN ?? defaultValue; 

合体演算子は次のように動作します。場合最初の値(左側)がヌルの場合、C#は2番目の式(右側)を評価します。

関連する問題