填充ComboBox MVC4实体框架数据库

时间:2014-03-10 19:43:15

标签: entity-framework asp.net-mvc-4

我正在尝试使用我的数据库填充组合框。我正在使用MVC4和实体框架。目前我的代码所处的位置,组合框中充满了Nova.Models.Clients。我希望填写实际的公司名称。

这是我的模特:

public class Clients
{
    [Key]
    public int ClientId { get; set; }
    public string CompanyName { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public ICollection<Estimates> Estimates { get; set; }
    public ICollection<Contracts> Contracts { get; set; }
}

这是我的控制器:

public ActionResult EditClients()
    {
        return View();
    }

这是我的观点:

@using Nova.Models
@model Nova.Models.Clients
@{
    var context = new NovaDb();
    var clients = context.Clients.OrderBy((x => x.CompanyName));
}

div class="control-group">
   @Html.LabelFor(x => x.CompanyName, new { @class = "control-label" })
   <div class="controls">
       @Html.DropDownListFor(x => x.CompanyName, new SelectList(clients), new { @class = "input-xlarge" })
  </div>
</div>

这是我的第一个真正的MVC项目,我之前没有碰过这个。和我的好友说话后,我有点困惑。我收集了我应该将我的数据访问权限放在控制器而不是视图中,但无论如何,它仍然可以工作。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

我建议使用单独的视图模型(与您的域模型不同,与您的Entity Framework poco对象不同)。这造成了关注点的分离。也就是说,您可以在视图模型上使用以下内容:

public class ClientViewModel
{
    public int ClientId { get; set; }
    public string CompanyName { get; set; }
    public IEnumerable<string> CompanyNames { get; set; }
    // Any other properties here, only include those needed by the view
}

您的控制器会将可能的公司名称列表填充到视图模型的CompanyNames属性中(同时将其他所需的视图模型属性从您的域模型复制到您的视图模型),此列表将是用作下拉列表的可能值。 CompanyName属性将用于存储选定的值。

您的观点中的下拉列表:

@Html.DropDownListFor(x => x.CompanyName, 
                      new SelectList(Model.CompanyNames), 
                      new { @class = "input-xlarge" });

如您所说,请确保您的数据访问权限在您的控制器中(如果不是单独的服务层)。

答案 1 :(得分:0)

尝试在ViewBag中传递选择列表

    public ActionResult EditClients()
    {
        var context = new NovaDb();
        ViewBag.ClientList = (from c in context.Clients
                             select new SelectListItem() 
                             {
                               Text=c.CompanyName,
                               Value=c.ClientId
                             }).ToList();
            return View();
        }

在视图中写

@Html.DropDownListFor(x => x.CompanyName,(List<SelectListItem>)ViewBag.ClientList,new { @class = "input-xlarge" });