ASP.NET MVC使用外键填充DropdownList

时间:2016-04-05 14:52:34

标签: c# asp.net-mvc razor

我的数据库中有一个条目的支架创建视图,其中包含一个包含ExamID的DropdownList。 这里的想法是在数据库的注册表中创建一个新记录,其中注册包含考试的GUID(ExamID)。 该列表当前填充了考试中的GUID。

考试本身没有名称,但通过DB(CourseID)中的外键链接到另一个表中的课程(有一个名称)。

我需要的是一个填充了与考试相关的课程名称的列表,但在创建新记录时仍会解析正确的ExamID。

由于我是C#/ ASP.NET的新手,我一直在使用ViewBags和lambda表达式,但没有一个能够工作。有一次,我认为我通过为课程创建一个新的ViewBar并将其解析为DropdownList而自然导致数据库错误,因为它想要将一个表中的CourseID作为ExamID保存在另一个表中,其中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>

我所追求的位是在视图中显示一个链接的课程名称,而不是来自ExamID的GUID。

1 个答案:

答案 0 :(得分:1)

假设您的考试课程中有课程导航,请尝试以下方法:

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

更改为:

ViewBag.ExamId = GetExamList();