情况:
一张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>