Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 填充组合框MVC4实体框架数据库_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

Entity framework 填充组合框MVC4实体框架数据库

Entity framework 填充组合框MVC4实体框架数据库,entity-framework,asp.net-mvc-4,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; }

我试图用我的数据库填充一个组合框。我正在使用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; }
}
以下是我的看法:

@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>
@使用Nova.Models
@model Nova.Models.Client
@{
var context=new NovaDb();
var clients=context.clients.OrderBy((x=>x.CompanyName));
}
div class=“控制组”>
@LabelFor(x=>x.CompanyName,新的{@class=“control label”})
@DropDownListFor(x=>x.CompanyName,新选择列表(客户端),新{@class=“input xlarge”})
这是我第一个真正的MVC项目,我以前从未遇到过。和我的朋友谈过之后,我有点困惑。我想我应该把数据访问放在控制器中,而不是视图中,但无论如何,它应该仍然可以工作


任何帮助都将不胜感激。

我建议使用单独的视图模型(与域模型不同,与实体框架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
}

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

尝试在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" });
@Html.DropDownListFor(x=>x.CompanyName,(List)ViewBag.ClientList,新的{@class=“input xlarge”});

我创建了模型,更新了数据库,并将其放入我的控制器:public ActionResult EditClients(){var model=from r in _db.ClientViewModels选择r.CompanyNames;返回视图(model);}视图有一个错误,该错误表明IEnumerable不能分配给Nova.Models.ClientYes,上面的视图将Client作为模型类型,而不是CompanyName的IEnumerable。将客户端作为模型传入。
    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" });