Im trying to get a drop-down list to work for users who are being graded. Each user can have multiple gradings. So when i create a new grade i want a drop-down to specify which use who will be receiving the grade.
I keep getting:
There is no ViewData item of type 'IEnumerable' that has the key 'GradingId'.
I've looked at many other questions but i cant work out what i need to change in my controller, view or models.
GradingController.cs
public ActionResult Create()
{
return View();
}
// POST: Gradings/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "GradingId,Eye,Cheek,Mouth,RestSymmetryTotal,RestSymmetryScore,VolForeheadWrinkle,VolGentleEyeClosure,VolOpenMouthSmile,VolSnarl,VolLipPucker,VolSymmetryTotal,VolSymmetryScore,SynForeheadWrinkle,SynGentleEyeClosure,SynOpenMouthSmile,SynSnarl,SynLipPucker,SynkinesisScore,CompositeScore")] Grading grading)
{
if (ModelState.IsValid)
{
grading.GradeDate = DateTime.Now;
db.Gradings.Add(grading);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GradingId = new SelectList(db.Gradings, "GradingId", "CodeName");
return View(grading);
}
// GET: Gradings/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Grading grading = db.Gradings.Find(id);
if (grading == null)
{
return HttpNotFound();
}
ViewBag.GradingId = new SelectList(db.Gradings, "GradingId", "CodeName");
return View(grading);
}
// POST: Gradings/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "GradingId,Eye,Cheek,Mouth,RestSymmetryTotal,RestSymmetryScore,VolForeheadWrinkle,VolGentleEyeClosure,VolOpenMouthSmile,VolSnarl,VolLipPucker,VolSymmetryTotal,VolSymmetryScore,SynForeheadWrinkle,SynGentleEyeClosure,SynOpenMouthSmile,SynSnarl,SynLipPucker,SynkinesisScore,CompositeScore")] Grading grading)
{
if (ModelState.IsValid)
{
db.Entry(grading).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.GradingId = new SelectList(db.Gradings, "GradingId", "CodeName");
return View(grading);
}
Create.cshtml (View)
@model FaceToFace.Model.Grading
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="editor-label">
@Html.LabelFor(model => model.User.CodeName, "User Name")
</div>
<div class="editor-field">
@Html.DropDownList("GradingId", String.Empty)
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
grading.cs (model)
namespace FaceToFace.Model
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Grading")]
public partial class Grading
{
public int? User_UserID { get; set; }
public virtual User User { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int GradingId { get; set; }
public DateTime GradeDate { get; set; }
public DateTime GradeEditDate { get; set; }
}
}
User.cs (model)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FaceToFace.Model
{
public class User
{
public virtual ICollection<Grading> UserGradings { get; set; }
}
}