2015-10-16 66 views
0

我想一个dropdownlistfor绑定到来自数据库MVC从数据库中获得

在模型

public class Actor 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    ... 

    // I have a database table called genre 
    [ForeignKey("Genre")] 
    public virtual IEnumerable<Genre> Genres { get; set; } 

} 

在控制器

// GET: Actors/Create 
    public ActionResult Create() 
    { 
     Actor actor = new Actor(); 

     actor.Genres = new // Believe I need to do something here... 
     return View(actor); 
    } 

在列表中虚拟的IEnumerable查看

<div class="form-group"> 
     @Html.LabelFor(model => model.Genres, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      <div class="dropdown"> 
       @Html.DropDownListFor(M => M.Genre, new SelectList(Model.Genres, "Value", "Text")) 
      </div> 
     </div> 
    </div> 

我需要做什么?

感谢

回答

0

你应该创建视图模型此

public class ActorViewModel 
{ 
    public Actor actor { get; set; } 
    public SelectList Genres { get; set; } 
    public int GenreId { get; set; } 
} 

创建返回类型为选择列表的

public SelectList GetAsSelectList() 
    { 
     var genres = (from s in GetAllGenres() 
         select new 
         { 
          s.Id, s.Name 
         }).ToList(); 
     return new SelectList((IEnumerable)genres, "Id", "Name"); 
    } 

在你的控制器,你填充模特属性的方法:

var model = new ActorViewModel 
{ 
    actor = new Actor(), 
    Genres = GetAsSelectList(), 
    GenreId = 0 
}; 
return View(model); 

在视图:

@Html.DropDownListFor(M => M.GenreId, Model.Genres,"--Select--") 
0

我的属性通常添加到我的ViewModelIEnumerable<SelectListItem>类型:

public class ActorViewModel 
{ 
    public int GenreId { get; set; } 
    public IEnumerable<SelectListItem> Genres { get; set; } 
} 

然后在我Controller我想补充一点,将返回这些为你的方法:

public IEnumerable<SelectListItem> GetGenres() 
{ 
    foreach (var genre in dbContext.Genres) 
    { 
      yield return new SelectListItem 
       { 
        Value = genre.Id.ToString(), 
        Text = genre.Name 
       }; 
    } 
} 

然后设置为这样:

在我 View

@Html.DropDownListFor(m => m.GenreId, Model.Genres, "Please select") 
viewModel.Genres = this.GetGenres(); 

然后