情况:
一张Movie表,一张Level表
当添加Movie信息的时候,属性Movie.level从Level表获取,并以DropDown的形式显示,用户填写好信息之后获取用户选中的值提交到后台,保存到数据库。
获取数据
** 后台MovieController **
public ActionResult Create()
{
MovieDBContext dbContext = new MovieDBContext();
ViewBag.level = new SelectList(dbContext.Levels, "LevelName", "LevelName");
//将数据库Level表的数据填充到SelectList并通过ViewBag传到前端
return View();
}
** 前端 展示数据**
<div class="form-group">
<div class="control-label col-md-2">
<b>电影等级</b>
</div>
<div class="col-md-10">
@Html.DropDownListFor(Model => Model.level.LevelName,(IEnumerable<SelectListItem>)ViewBag.level)
//因为Movie.level 保存的其实是一个Level类型的对象,但是Dropdown选中的值是一个string值,所以我们将选中的值赋给Movie.level.LevelName
</div>
</div>
** 后台处理数并添加到数据库 **
[HttpPost]
public ActionResult Create(Movie movie)
{
MovieDBContext dbContext = new MovieDBContext();
Level l = dbContext.Levels.FirstOrDefault(u => u.LevelName == movie.level.LevelName);
//通过在前端得到的LevelName属性反过来查到这个对象,并且赋给movie.level
movie.level = l;
dbContext.Movies.Add(movie);
dbContext.SaveChanges();
return RedirectToAction("ListTemplete");
}
** List展示数据的时候 **
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseTime)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.level.LevelName)
//item.level.LevelName
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>