我有一个脚手架为我的数据库中的一个条目创建视图,其中包含一个包含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在视图中。
你说考试是由外键链接到课程,这是一个以许多,多对多,一对一? – JamieD77
@ JamieD77它是一门课程1 --- *考试关系。 –
如果您的考试成绩为1对多,您将如何知道您正在参加哪个考试..除非每门课程只有一门考试,否则您只会在下拉菜单 – JamieD77