And*_*ear 5 razor asp.net-mvc-4
我正在尝试创建一个从数据库填充的下拉列表.我有:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我想要的是创建一个表单,该表单将创建与项目和员工相关的新项目时间.我正在尝试使用下拉列表在创建表单上显示员工和项目.显然,我对此完全陌生,但到目前为止我所做的是:
[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");
}
}
Run Code Online (Sandbox Code Playgroud)
并在表格上:
@model TimesheetMVC.Models.ProjectHour
...
@Html.DropDownListFor(model => model.employeeId, (SelectList)ViewBag.EmployeeId)
Run Code Online (Sandbox Code Playgroud)
这显然是可怕的错误.任何帮助将非常感激...!
Dar*_*rov 13
不要使用相同的名称EmployeeId.在ASP.NET MVC中创建下拉列表需要两件事:一个标量属性将保存所选值,另一个属性将包含可能的值.但由于您使用的是ViewBag(我完全建议您反对),您可以执行以下操作:
ViewBag.Employees = emp;
Run Code Online (Sandbox Code Playgroud)
在你看来:
@Html.DropDownListFor(
model => model.employeeId,
(IEnumerable<SelectListItem>)ViewBag.Employees
)
Run Code Online (Sandbox Code Playgroud)
但正如我所说,这根本不是我推荐的方法.我建议使用视图模型.因此IEnumerable<SelectListItem>,在视图模型上定义属性:
public IEnumerable<SelectListItem> Employees { get; set; }
Run Code Online (Sandbox Code Playgroud)
并在您的控制器中填充此视图模型属性,然后使您的视图强烈键入视图模型.
或者你可以在控制器中做一个
SelectList selectList = new SelectList(db.Employees, "Id", "LastName");
ViewBag.EmployeeList = selectList;
Run Code Online (Sandbox Code Playgroud)
并在视图中
@Html.DropDownBoxFor(model => model.id_Employee, ViewBag.EmployeeList as SelectList)
Run Code Online (Sandbox Code Playgroud)
我发现这种方法更容易.
| 归档时间: |
|
| 查看次数: |
25723 次 |
| 最近记录: |