我是STACKOVERFLOW的新人......
我在选择的DDL项目中添加学生时遇到错误。
模型1: 部门
public class Department
{
[Key]
public int deptid { get; set; }
public string deptname { get; set; }
public IEnumerable<Student> Student { get; set; }
}
模型2:学生
public class Student
{
[Key]
public int stdid { get; set; }
public string stdname { get; set; }
public string stdaddress { get; set; }
[ForeignKey("Department")]
public int deptid { get; set; }
public Department Department { get; set; }
}
DepartmentsController:
public class DepartmentsController : Controller
{
// GET: Departments
public ActionResult AddDepartment()
{
return View();
}
[HttpPost]
public ActionResult AddDepartment(Department model)
{
if (ModelState.IsValid)
{
using (DbAccess db=new DbAccess())
{
db.Departments.Add(model);
db.SaveChanges();
}
}
return View(model);
}
}
StudentsController:
public class StudentsController : Controller
{
// GET: Students
public ActionResult AddStudent()
{
DbAccess db = new DbAccess();
SelectList datalist = new SelectList(db.Departments.ToList(), "deptid", "deptname");
ViewBag.deptid = datalist;
return View();
}
[HttpPost]
public ActionResult AddStudent(Student model)
{
if (ModelState.IsValid)
{
using (DbAccess db = new DbAccess())
{
db.Students.Add(model);
db.SaveChanges();
}
}
return View(model);
}
}
学生观看
@model MVC_Practice2.Models.Student
@{
ViewBag.Title = "AddStudent";
Layout = "~/Views/Shared/_Layout.cshtml";
SelectList datalist = ViewBag.deptid;
}
.
.
.
<div class="form-group">
@Html.LabelFor(model => model.deptid, "deptid", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(m=>m.deptid,datalist)
@Html.ValidationMessageFor(model => model.deptid, "", new { @class = "text-danger" })
</div>
</div>
因此,当我从DDL添加所选部门的学生时,我遇到了以下错误:
具有键'deptid'的ViewData项的类型为'System.Int32',但必须是'IEnumerable&lt; SelectListItem&gt;'类型。
以下一行突出显示:
@Html.DropDownListFor(m=>m.deptid, datalist)