2011-08-28 35 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