5

我正在尝试创建一个从数据库填充的下拉列表。我有:

public class Employee
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public String FirstName { get; set; }
        [Required]
        public String LastName { get; set; }
        [Required]
        public String JobTitle { get; set; }
    }

    public class Project
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public String ProjectName { get; set; }
        [Required]
        public String CompanyName { get; set; }
    }

    public class ProjectHour
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public decimal Hours { get; set; }
        [Required]
        public DateTime Date { get; set; }
        public virtual ICollection<Employee> employeeId { get; set; }
        public virtual ICollection<Project> projectId { get; set; }
    }

我想要的是创建一个表单,该表单将创建与项目和员工相关联的新项目时间。我正在尝试使用下拉列表在创建表单上显示员工和项目。显然,我对此完全陌生,但到目前为止我所拥有的是:

[HttpPost]
     public ActionResult CreateProjectHour(ProjectHour newProjectHour)
     {
             using (var db = new TimesheetContext())
             {
                 IEnumerable<SelectListItem> emp = db.Employees
                  .Select(c => new SelectListItem
                  {
                      Value = c.Id.ToString(),
                      Text = c.LastName
                  });
                 ViewBag.EmployeeId = emp;

                 db.ProjectHours.Add(newProjectHour);
                 db.SaveChanges();
             }

             return RedirectToAction("ProjectHourList");
         }
     }

在表格上:

@model TimesheetMVC.Models.ProjectHour
...
@Html.DropDownListFor(model => model.employeeId, (SelectList)ViewBag.EmployeeId)

这显然是非常错误的。任何帮助将非常感激...!

4

3 回答 3

13

不要使用相同的名称 EmployeeId。在 ASP.NET MVC 中创建下拉列表需要两件事:一个保存选定值的标量属性和一个包含可能值的集合属性。但是由于您使用的是 ViewBag(我完全不推荐),您可以执行以下操作:

ViewBag.Employees = emp;

在您看来:

@Html.DropDownListFor(
    model => model.employeeId, 
    (IEnumerable<SelectListItem>)ViewBag.Employees
)

但正如我所说,这根本不是我推荐的方法。我建议使用视图模型。IEnumerable<SelectListItem>所以在你的视图模型上定义一个属性:

public IEnumerable<SelectListItem> Employees { get; set; }

并在您的控制器中填充此视图模型属性,然后将您的视图强类型化为视图模型。

于 2012-06-27T16:45:22.020 回答
9

或者你可以在控制器中做一个

SelectList selectList = new SelectList(db.Employees, "Id", "LastName");
ViewBag.EmployeeList = selectList;

并在视图中

@Html.DropDownBoxFor(model => model.id_Employee, ViewBag.EmployeeList as SelectList)

我发现这种方法更容易。

于 2012-11-27T17:55:26.327 回答
0

EmployeeId是一个IEnumerable<SelectListItem>,不是一个SelectList
因此,您的演员表无法工作。

您需要显式创建一个SelectList.

于 2012-06-27T16:26:25.433 回答