2016-04-05 77 views
2

我有一個腳手架爲我的數據庫中的一個條目創建視圖,其中包含一個包含ExamID的DropdownList。 這裏的想法是在DB中的註冊表中創建一個新記錄,其中註冊包含考試的GUID(ExamID)。 該列表當前由來自考試的GUID填充。ASP.NET MVC使用外鍵填充DropdownList

考試本身沒有名字,但通過數據庫(CourseID)中的外鍵鏈接到另一個表中的課程(名稱不同)。

我需要的是一個填充了與考試相關的課程名稱的列表,但在創建新記錄時仍會解析正確的ExamID。

由於我是C#/ ASP.NET的新手,我一直在關注ViewBags和lambda表達式,但都沒有工作。有一次,我以爲我通過製作一個新的ViewBar for Courses並將其解析到DropdownList中,但自然會導致數據庫錯誤,因爲它希望將CourseID中的CourseID作爲另一個TestID保存在CourseID爲不是關鍵。

控制器:

// 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); 
    } 

的觀點:

<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> 

位我後顯示一個鏈接課程名稱代替GUID從ExamID在視圖中。

+0

你說考試是由外鍵鏈接到課程,這是一個以許多,多對多,一對一? – JamieD77

+0

@ JamieD77它是一門課程1 --- *考試關係。 –

+0

如果您的考試成績爲1對多,您將如何知道您正在參加哪個考試..除非每門課程只有一門考試,否則您只會在下拉菜單 – JamieD77

回答

1

假設你有你的考試類課程導航,試試這個:

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

更改爲:

ViewBag.ExamId = GetExamList(); 
+0

非常感謝! 採取了一些擺弄,但它最終奏效。 只好功能改變爲: '私人列表 GetExamList()' 和ViewBag到: 'ViewBag.ExamList =新的SelectList(GetExamList(), 「值」, 「文本」);' 因爲我得到了無窮無盡的數據類型,因爲我得到了無窮無盡的數據類型,因爲我得到了無窮無盡的數據類型(因爲我得到了無窮無盡的數據類型否則會出錯,但這是最終的正確答案! –