因此,我想有一个更深入的了解。我向MVC4上的MSFT教程添加了一点功能,您可以在这里找到(http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4)MVC4剃须刀下拉列表与外键绑定
该模型非常简单。你有电影和导演。每部电影最多有1位导演。
我希望用户能够从一个下拉列表中分配一个导演到电影并保存它,但不知何故电影被保存在数据库中的空Director_ID字段。
这里是我的简单的模型:
public class Movie
{
public int ID { get; set; }
[Required]
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
[Required]
public string Genre { get; set; }
public decimal Price { get; set; }
public string Ranking { get; set; }
public Director Director { get; set; }
}
public class Director
{
public int ID { get; set; }
public string Name { get; set; }
}
当被生成的运动表它带有一个DIRECTOR_ID场。甜!
我想用户选择一个导演,而编辑影片造型在电影编辑视图中的下拉列表,以便 我设法一个下拉列表绑定到所有董事的名单中获得表单的数据库
<div class="editor-field">
@Html.DropDownListFor(model => model.Director.ID, ViewBag.Directors as List<SelectListItem>, "All")
</div>
控制器:
//GET
public ActionResult Edit(int id = 0)
{
var DirectorsList = new List<SelectListItem>();
var DirQuery = from d in db.Directors select d;
foreach (var d in DirQuery)
{
DirectorsList.Add(new SelectListItem { Value = d.ID.ToString(), Text = d.Name });
}
ViewBag.Directors = DirectorsList;
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
我得到了我的下拉我的所有董事的名单。好吧!
现在,当我保存电影:
[HttpPost]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
movie.Director = db.Directors.Find(movie.Director.ID);
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
的编辑方法接收带有一个导演财产(如我在模型中指定)的论点电影,当我浏览到它,我看到两个特性表单编辑: “ID”:它带有用户从下拉列表中选择的适当值,“Name”:设置为null。 正如您在代码中看到的,我从数据库中选择与下拉值相匹配的整个控制器对象并保存它
问题是保存电影时,Movies表(Director_ID)上的外键永远不会更新。
我在做什么错?有没有更好的方法来做到这一点?
替代方法[下拉绑定检查此演示](http://lesson8.blogspot.in/2013/06/bind-dropdownlist-in-mvc4-razor.html) – Sender