我的数据库中有一个条目的支架创建视图,其中包含一个包含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。
答案 0 :(得分:1)
假设您的考试课程中有课程导航,请尝试以下方法:
private SelectList GetExamList()
{
return db.Exams
.Select(e => new SelectListItem {
Value = e.Id,
Text = e.Course.Name })
.ToList();
}
更改为:
ViewBag.ExamId = GetExamList();