2012-12-27 18 views
11

Açılır listeden boş değerlere izin vermeye çalışıyorum, veritabanı tablomda int olan belirli bir alan için boş değerlere izin verdim Kod çalıştırıyorum "Nullable nesnesinin bir değeri olmalı" diyerek hata alıyorum, problemin ModelState'de olabileceğini düşünüyorum. değeri olmayan get value of nullable nesne, çalışırkenBoş değerlere izin vermeye çalışıyorum ama ... "Nullable nesnesinin bir değeri olmalıdır"

Kontrolör

[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

'ISBN' özelliği' Loan' sınıfı null olur mu? –

+0

* Hangi * null nesnesinin değeri olmalı? ModelState ne zaman geçerli sayılır? Koddaki hangi satırda bu hatayı alıyorsunuz? –

+0

evet öyle, ama şimdi ilk kez bu hatayı alıyorum ama geri dönüp listeyi görüyorum değişiklikleri kaydediyorum şimdi ne olduğunu şimdi yapmıyorum – ilirvg

cevap

18

Bu hatayı alıyorsanız. Loan.ISBN özellik null değilse Loan.ISBN özellik null

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

o zaman

ISBN = student.ISBN 
+0

"Value" özelliğini "null" olarak ayarlarsanız, o zaman neden HasValue doğru değil? Görünüşe göre, açıkça ayarlandığından, bir değere sahip ve bu değer "null". – toddmo

+0

@toddmo [HasValue] (https://msdn.microsoft.com/en-us/library/sksw8094 (v = vs.110) .aspx), null nesnesinin geçerli bir * değeri olan * geçerli değerine sahip olup olmadığını gösterir. 'null'' struct' için geçerli bir değer değildir, bu nedenle 'HasValue' amacı ile yanlış geri dönmelidir. Ayrıca şunu unutmayın; 'Value' '' '' '' '' '' '' ''' '(yine, değer türüne null atayamazsınız) ve daha da fazlası - 'Değer' salt okunur özelliktir. –

4

Bu durum sizi oluşuyor sonra basitçe olabilen türün Value erişmeden student.ISBN atamak, o mülkün varsayılan değer sağlamalıdır HasValue yanlış olduğunda, Nullable türünün Value özelliğine erişmeye çalışın. MSDN'de bkz Nullable Types. Yani her şeyden önce ISBN boş olup olmadığını görmek için bu satırı

ISBN = student.ISBN.Value 

kontrol edin. Aşağıda gösterilen kaynaşabilecek operatörü, ?? kullanılarak,

ISBN = student.ISBN.GetValueOrDefault(); 
2

aynı görevi gerçekleştirmek için kısa yoldan bu hattı değiştirmek isteyebilirsiniz:

ISBN = student.ISBN ?? defaultValue; 

kaynaşabilecek operatör şöyle çalışır: eğer ilk değer (sol taraf) boş, sonra C# ikinci ifadeyi değerlendirir (sağ taraf).

İlgili konular