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 でドロップダウン リストを作成するには、選択した値を保持するスカラー プロパティと、可能な値を含むコレクション プロパティの 2 つが必要です。ただし、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

または、コントローラーで a を実行することもできます

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 に答える