我一直在玩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>
答案 0 :(得分:2)
您的代码似乎正确无误。您已经定义了一个视图模型,其中包含视图所需的必要属性,将其填充到控制器中并传递给此强类型视图。
我对PopulateTeamsDropDownList
方法中的以下行只做了一个小的评论:
_Base.DataRepository.GetTeams();
我希望你已经用接口(或抽象类)抽象了这个存储库,并使用了DI来为你的控制器注入一些具体的实现。这将削弱控制器与数据访问方式之间的耦合,并简化单独测试应用程序不同层的单元。