Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.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
Asp.net mvc viewModel创建视图中的下拉列表_Asp.net Mvc_Entity Framework_Razor_Drop Down Menu - Fatal编程技术网

Asp.net mvc viewModel创建视图中的下拉列表

Asp.net mvc viewModel创建视图中的下拉列表,asp.net-mvc,entity-framework,razor,drop-down-menu,Asp.net Mvc,Entity Framework,Razor,Drop Down Menu,我有一个“Leads”表,它与“Employees”表有一对多的关系。我还创建了leadViewModel类,因为我需要Lead的一些附加信息(如地址和电话等) 以下是Lead类: public partial class Leads { [Key] public int LeadID { get; set; } public string FirstName { get; set; } public string LastName { get; set; }

我有一个“Leads”表,它与“Employees”表有一对多的关系。我还创建了leadViewModel类,因为我需要Lead的一些附加信息(如地址和电话等)

以下是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; }
}
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>
@model CL\u AHR\u CRM.ViewModels.leadwiewmodel
...
@LabelFor(model=>model.\u leads.EmployeeID,“EmployeeID”,htmlAttributes:new{@class=“controllabel col-md-2”})
@DropDownListFor(x=>x._leads.EmployeeID,new SelectList(Model.EmployeesSelectListItem,“EmployeeID”,“FirstName”),htmlAttributes:new{@class=“form control”})
@Html.ValidationMessageFor(model=>model.\u leads.EmployeeID,“,new{@class=“text danger”})

我重复我的问题:当使用这样的viewModel时,如何在视图中使用DropDownlast,因为显然我所做的不是这样,也不起作用。我在create视图中的Html.DropdownlistFor(…)上得到错误:“对象引用未设置为对象的实例。”您的视图基于
leadwiewmodel
的类型,但在get方法中,您不将模型的实例传递给视图,更不用说填充
EmployeesSelectListItem
属性,因此在
DropDownListFor()
方法中,
new SelectList(Model.EmployeesSelectListItem,
将抛出异常(
Model
的值为
null

将“视图模型”属性更改为

public SelectList EmployeesSelectListItem { get; set; } // perhaps rename to EmployeeList?
然后将您得到的方法更改为

public ActionResult Create()
{
  LeadViewModel model = new LeadViewModel();
  model.EmployeesSelectListItem = new SelectList(db.Employees, "EmployeeID", "FirstName");
  return View(model);
}
同样,在POST方法中,您需要使用

leadVM.EmployeesSelectListItem = new SelectList(db.Employees, "EmployeeID", "FirstName");
返回视图时(即
ModelState
无效时)

然后在视图中使用

@Html.DropDownListFor(x => x._leads.EmployeeID, Model.EmployeesSelectListItem, new { @class = "form-control" })

删除
ViewBag.EmployeeID=new SelectList(db.EmployeeID,“EmployeeID”,“FirstName”);
并将其替换为
leadVM.Employees SelectList项(在GET和POST中),但在GET中需要
leadVM=new leadVM()
然后返回视图(leadVM);请您编写完整的代码行好吗?对不起,我是新手!谢谢,但现在我遇到了以下错误:{“DataBinding:'System.Web.Mvc.SelectListItem'不包含名为'EmployeeID'的属性。}我的Html.DropdownListFor(…)是否有任何问题对不起,忘记了在视图中包含您需要的更改-请参阅更新我不知道如何感谢您。您是一位救世主!完美我的意思是完美的答案。我将在整个项目中感谢您。
leadVM.EmployeesSelectListItem = new SelectList(db.Employees, "EmployeeID", "FirstName");
@Html.DropDownListFor(x => x._leads.EmployeeID, Model.EmployeesSelectListItem, new { @class = "form-control" })