Entity framework 填充组合框MVC4实体框架数据库
我试图用我的数据库填充一个组合框。我正在使用MVC4和实体框架。目前,按照我的代码所处的位置,组合框中充满了Nova.Models.Clients。我要填写实际的公司名称 这是我的模型: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; }
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" });