2016-04-05 18 views
2

Veritabanımdaki, ExamIDs içeren bir DropdownList içeren bir girdinin oluşturulmuş bir iskelet görünümü var. Buradaki fikir, bir Kaydın bir Sınav için bir GUID içerdiği DB'deki Kayıtlar tablosunda yeni bir kayıt oluşturmaktır (ExamID). Bu listede şu anda Sınavlar'daki GUID'ler var.ASP.NET MVC Yabancı anahtarla bir dropdownList'i yerleştirme

Sınavların kendilerinin bir adı yoktur, ancak başka bir tabloda DB (CourseID) içindeki bir yabancı anahtar aracılığıyla bir Kursa (bir adı olan) bağlanır.

Neye ihtiyacım var, sınava giren Derslerin isimleri ile doldurulmuş bir listedir, ancak yeni kaydı oluştururken doğru ExamID'yi ayrıştırmaktadır.

C#/ASP.NET'te acemi olduğum için ViewBags ve lambda ifadeleriyle uğraşıyordum, bunların hiçbiri işe yaramıyordu. Bir noktada ben Kursları için yeni Viewbar yapım ve diğerinden ExamID gibi bir tablodan courseID kaydetmek istedim çünkü bir tabloda, bir DB hataya neden doğal DropDownList ancak hangi courseID olduğunu ayrıştırma bunu sanıyordum bir anahtar değil.

Denetleyici:

// GET: Registrations/Create 
    public ActionResult Create() 
    { 
     ViewBag.ExamId = new SelectList(db.Exams, "Id", "Id"); 
     return View(); 
    } 

    // POST: Registrations/Create 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "Id,ExamId,StudentId,Deleted,TimeStamp")] Registration registration) 
    { 
     if (ModelState.IsValid) 
     { 
      registration.Id = Guid.NewGuid(); 
      registration.StudentId = User.Identity.GetUserId(); 
      registration.TimeStamp = DateTime.Now; 
      db.Registrations.Add(registration); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.StudentId = new SelectList(db.AspNetUsers, "Id", "Firstname", registration.StudentId); 
     ViewBag.ExamId = new SelectList(db.Exams, "Id", "Name", registration.ExamId); 
     return View(registration); 
    } 

Görünüm:

<div class="form-horizontal"> 
     <h4>Kies een tentamen</h4> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.ExamId, "Vak", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("ExamId", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.ExamId, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <div> 
        <input type="submit" value="Schrijf in" class="btn btn-primary"/> 
       </div> 
      </div> 
     </div> 
    </div> 

biraz ben sonra görünümünde ExamID yerine GUID bağlantılı Ders Adı gösteriyor ediyorum.

+0

sen, Sınav yabancı anahtar ile Course bağlıdır söylemek bu biridir Birçoğu, çok, bire bir? – JamieD77

+0

@ JamieD77 derstir 1 --- * Sınav ilişkisi. –

+0

nasıl her ders sadece bir sınav olmadıkça otomatik olarak kodu kullanmayı deneyin vermedi .., sadece açılan – JamieD77

cevap

1

Eğer Sınav sınıfı bir Kurs navigasyon var varsayarsak, bu deneyin:

private SelectList GetExamList() 
{ 
    return db.Exams 
     .Select(e => new SelectListItem { 
     Value = e.Id, 
     Text = e.Course.Name }) 
    .ToList(); 
} 

Değiştir:

ViewBag.ExamId = GetExamList(); 
+0

Çok teşekkürler! Bazı işe yaradı ama sonunda işe yaradı. işlevi değiştirmek zorunda kaldı: 'özel List GetExamList()' ve ViewBag için: 'ViewBag.ExamList = new SelectList (GetExamList(), "değer", "Metin");' ve görünümde: '@ Html.DropDownListFor (model => model.ExamId, (SelectList) ViewBag.ExamList, htmlAttributes: yeni {@class = "bir şekilde kontrol"}) ' sonsuz veri türü var için Aksi halde hatalar, ama bu sonuçta doğru cevaptı! –