2016-04-05 12 views
2

ExamIDを含むDropDownListを含むデータベースのエントリのScaffolded Createビューがあります。 ここでの考え方は、DBの[登録]テーブルに新しいレコードを作成することです。ここで、登録にはExam(ExamID)のGUIDが含まれています。 リストには現在、試験のGUIDが入力されています。ASP.NET MVCドロップダウンリストに外部キーを設定する

試験には名前はありませんが、DB(CourseID)の外部キーを介して別のテーブルにコース(名前を持っています)にリンクされています。

私が必要とするのは、試験に関連付けられたコース名が入力されたリストですが、新しいレコードを作成するときに正しいExamIDが解析されます。

私はC#/ ASP.NETの初心者ですから、私はViewBagsとラムダ式を使っていませんでした。ある時点では、コース用の新しい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

:へ

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

変更多くの、多くの、多くの、1対1? – JamieD77

+0

@ JamieD77それはコース1です--- *試験の関係。 –

+0

どのような試験であれば、どのような試験を受けるのですか?どのコースにも1つの試験だけがある場合を除き、同じコース名が複数回ドロップダウンで表示されます – JamieD77

答えて

1

これを試してみてください、あなたは試験クラスのコースナビゲーションを持っていると仮定すると:これは1つである、あなたは試験が外部キーによってコースにリンクされていると言う

ViewBag.ExamId = GetExamList(); 
+0

ありがとうございました! 手探りをしたが、最終的にはうまくいった。 はに機能を変更しなければならなかった: '民間一覧 GetExamList()' とViewBagへ: 'ViewBag.ExamList =新しいSelectListの(GetExamList()、 "値"、 "テキスト");' ビュー内: '@Html.DropDownListFor(モデル=> model.ExamId、(選択リスト)ViewBag.ExamList、htmlAttributes:new {@class ="フォームコントロール "})' 私は無限のデータ型そうでなければエラーですが、これは最終的に正しい答えでした。 –

関連する問題