2011-08-28 34 views
1

我一直在玩MVC 3,看着填充下拉列表。我在网上看到一些推荐使用视图模型的例子,所以这是我的第一次尝试。我的代码似乎工作,但任何人都可以告诉我,如果这是做到这一点的正确方法?我的第一个查看模型

我的模型:

public class ContactGP 
{ 
    public int TeamID { get; set; } 

    [Required(ErrorMessage = "Please select a Team Name")] 
    [DataType(DataType.Text)] 
    [DisplayName("Team Name")] 
    public string TeamName { get; set; } 
} 

我的视图模型:

public class ContactGPViewModel 
{ 
    public string SelectedTeamID { get; set; } 
    public IEnumerable<Team> Teams { get; set; } 
} 

我的控制器:

public IEnumerable<Team> PopulateTeamsDropDownList() 
    { 
     IEnumerable<Team> lstTeams = _Base.DataRepository.GetTeams(); 

     return lstTeams; 
    } 

    public ActionResult ContactGP() 
    { 
     var model = new ContactGPViewModel 
     { 
      Teams = PopulateTeamsDropDownList() 
     }; 

     return View(model); 
    } 

而我的观点:

<p> 
    @Html.DropDownListFor(
     x => x.SelectedTeamID, 
     new SelectList(Model.Teams, "TeamID", "TeamName") 
    ) 
</p> 

回答

2

你的代码似乎正确。您已经定义了一个视图模型,该视图模型包含视图将需要的必要属性,并将其填充到控制器中并传递到此强类型视图。

我只有在PopulateTeamsDropDownList方法内以下行小注:

_Base.DataRepository.GetTeams(); 

我希望你提取这个库与接口(或抽象类),并以注入一些具体的实施使用DI进入你的控制器。这将削弱您的控制器与访问数据的方式之间的耦合,并简化单独测试应用程序不同层次的单元测试。

+0

感谢您的建议Darin! – user517406