次の2つのモデルがあります。
従業員モデル
public int ID{get;set;}
public string name{get;set;}
public virtual Department Department{get;set;}
部門モデル
public int ID{get;set;}
public string name{get;set;}
そして、新しい従業員を追加するときに、従業員ビューでドロップダウンを使用しています
従業員編集コントローラー
public ActionResult Edit(employee employee)
{
....
ViewBag.ID = new SelectList(db.departments,"ID","Name",employee.ID);
return View(employee);
}
ビューで:
@Html.DropDownList("ID")
新しい従業員を追加すると部門が適切に保存されますが、既存のレコードを編集すると保存されません。
私は何を見落としていますか?
モデルバインディング:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AssetManagement.Models;
namespace AssetManagement.Controllers
{
public class EmployeeController : Controller
{
private AssetContext db = new AssetContext();
//
// GET: /Employee/
public ActionResult Index()
{
var employees = db.Employees.Include(e => e.Department);
return View(employees.ToList());
}
//
// GET: /Employee/Details/5
public ActionResult Details(int id = 0)
{
Employee employee = db.Employees.Find(id);
if (employee == null)
{
return HttpNotFound();
}
return View(employee);
}
//
// GET: /Employee/Create
public ActionResult Create()
{
ViewBag.ID = new SelectList(db.Departments, "ID", "Name");
return View();
}
//
// POST: /Employee/Create
[HttpPost]
public ActionResult Create(Employee employee)
{
if (ModelState.IsValid)
{
db.Employees.Add(employee);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ID = new SelectList(db.Departments, "ID", "Name", employee.ID);
return View(employee);
}
//
// GET: /Employee/Edit/5
public ActionResult Edit(int id = 0)
{
Employee employee = db.Employees.Find(id);
if (employee == null)
{
return HttpNotFound();
}
ViewBag.IDList = new SelectList(db.Departments, "ID", "Name", employee.ID);
return View(employee);
}
//
// POST: /Employee/Edit/5
[HttpPost]
public ActionResult Edit(Employee employee)
{
if (ModelState.IsValid)
{
db.Entry(employee).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.IDList = new SelectList(db.Departments, "ID", "Name", employee.ID);
return View(employee);
}
//
// GET: /Employee/Delete/5
public ActionResult Delete(int id = 0)
{
Employee employee = db.Employees.Find(id);
if (employee == null)
{
return HttpNotFound();
}
return View(employee);
}
//
// POST: /Employee/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
Employee employee = db.Employees.Find(id);
db.Employees.Remove(employee);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
public class Division { public int ID {get;set;} public string Name { get; 設定; } public virtual Employee SiteContact { get; } 設定; } public ICollection アセット{ get; 設定; } }
public class Employee
{
[Key, ForeignKey("Division")]
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual Department Department{ get; set; }
public string Title { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string BuildingName { get; set; }
public string Floor { get; set; }
}