2016-04-05 75 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(), “值”, “文本”);' 因为我得到了无穷无尽的数据类型,因为我得到了无穷无尽的数据类型,因为我得到了无穷无尽的数据类型(因为我得到了无穷无尽的数据类型否则会出错,但这是最终的正确答案! –