我正在使用带有EF的VS2012 MVC 4.我想创建一个视图,用户可以上传电影标题和类型(actionmovie,scifi等来自下拉列表!),并将其存储在数据库中.
模型:
public class Movie { [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string Name { get; set; } [ForeignKey("Type")] public int TypeId { get; set; } public virtual Type Type { get; set; } } public class Type { [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int TypeId { get; set; } public string TypeName { get; set; } public virtual ICollection<Movie> Movies { get; set; } }
如果我是对的,我成功地在Type和Movie表之间创建了One to Many关系.
控制器:
[HttpPost] [Authorize] public ActionResult NewMovie(Movie movie) { db.Movies.Add(movie); db.SaveChanges(); return View(movie); }
视图:
@using (Html.BeginForm()) { <table> <tr> <td>@Html.displayNameFor(model => model.Name)</td> <td>@Html.displayNameFor(model => model.TypeId)</td> </tr> <tr> <td>@Html.TextBoxFor(model => model.Name)</td> <td>@Html.DropDownListFor......... </tr> </table> <input type="submit" value="submit" /> }
我真的不知道如何在视图中制作这个Dropdownlist,并以最安全的方式在控制器中为其制作具体细节
(我想我应该从movie.typeid或Type类中创建一个列表/可枚举)
如果你能帮帮我,我会很高兴的!谢谢
解决方法
我将List用于我的下拉列表.这样做就可以在控制器上构建这样的列表
List<SelectListItem> ls = new List<SelectListItem>(); foreach(var temp in Movies){ ls.Add(new SelectListItem() { Text = temp.Text,Value = temp.Value }); } Movie.MovieList = ls;
public List<SelectListItem> MovieList { get; set; }
在你的模型中.然后在视图中,您可以像这样构建下拉列表
@Html.DropDownListFor(x => x.Id,Model.MovieList)
如果您有任何疑问,请告诉我.