【发布时间】:2015-07-01 08:25:12
【问题描述】:
我有一个“Leads”表,它与“Employees”表有一对多的关系。我还创建了一个leadViewModel 类,因为我需要一些线索的附加信息(比如地址和电话等)
这里是 Lead 类:
public partial class Leads
{
[Key]
public int LeadID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[NotMapped]
public string FullName { get { return FirstName + " " + LastName; } }
public int EmployeeID { get; set; }
public virtual Employees Employees { get; set; }
}
员工类:
public partial class Employees
{
public Employees()
{
this.Leads = new HashSet<Leads>();
}
[Key]
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[NotMapped]
public string FullName { get { return FirstName + " " + LastName; } }
public virtual ICollection<Leads> Leads { get; set; }
}
leadViewModel:
public class LeadViewModel
{
public Leads _leads { get; set; }
public Addresses _addresses { get; set; }
public Phones _phones { get; set; }
public Emails _emails { get; set; }
public IEnumerable<SelectListItem> EmployeesSelectListItem { get; set; }
}
现在我想在“创建”视图中有一个下拉列表。我不知道该怎么办。这是我所做的并得到了错误。
LeadsController 创建获取:
// GET: Leads/Create
public ActionResult Create()
{
ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FirstName");
return View();
}
LeadsController 创建帖子:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "_leads,_addresses,_phones,_emails,EmployeesSelectListItem")] LeadViewModel leadVM)
{
if (ModelState.IsValid)
{
using (TransactionScope leadScope = new TransactionScope())
{
db.Leads.Add(leadVM._leads);
db.SaveChanges();
leadScope.Complete();
return RedirectToAction("Index");
}
}
ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FirstName", leadVM._leads.EmployeeID);
return View(leadVM);
}
最后是创建视图:
@model CL_AHR_CRM.ViewModels.LeadViewModel
...
<div class="form-group">
@Html.LabelFor(model => model._leads.EmployeeID, "EmployeeID", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(x => x._leads.EmployeeID, new SelectList(Model.EmployeesSelectListItem, "EmployeeID", "FirstName"), htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model._leads.EmployeeID, "", new { @class = "text-danger" })
</div>
</div>
我重复我的问题:当使用这样的 viewModel 时,我如何在视图中使用 dropdownliast,因为显然我所做的不是正确的方式并且不起作用。我收到错误:“对象引用未设置为对象的实例。”在创建视图中的 Html.DropdownlistFor(...) 上。
【问题讨论】:
-
删除
ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FirstName");并用leadVM.EmployeesSelectListItem替换它(在 GET 和 POST 中),但在 GET 中你需要LeadViewModel leadVM = new leadVM()然后 `return View(leadVM); -
你能写出完整的代码行吗?对不起,我是菜鸟!
标签: asp.net-mvc entity-framework razor drop-down-menu