强类型列表从视图返回以填充模型
本文关键字:填充 模型 返回 视图 列表 强类型 | 更新日期: 2023-09-27 18:28:43
我试图传递数据,但在使用强类型数据时遇到问题。
总体目标是:
-
索引:所有员工的复选框列表。表中的组,由工作地址分隔(通过foreach(字符串地址)+foreach(员工e,其中e.where(地址)很容易实现)。
-
报告的详细信息。这部分应该显示所选用户的列表,询问一些小时和标题。很简单。
-
完成并显示。此部分应将数据插入数据库并呈现pdf。
这是我希望员工数据所在的类。为了缩短它,我删除了其中的方法:
public class IndexModel
{
public List<EmployeeForList> Employees { get; set; }
public class EmployeeForList
{
public bool IsChecked { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int EmployeeId { get; set; }
public string Building { get; set; }
public EmployeeForList()
{
}
public EmployeeForList(TXEP.InfoWeb employee)
{
this.FirstName = employee.FirstName;
this.IsChecked = false;
this.LastName = employee.LastName;
this.Building = employee.BuildingAddress;
this.EmployeeId = employee.EmployeeId;
}
}
}
这是视图代码:
@using (@Html.BeginForm("TrainingDetail", "Home", FormMethod.Post))
{
<table border="1">
@foreach (string building in Model.GetUniqueBuildings())
{
<tr>
@foreach (var employee in Model.GetEmployeesFromBuilding(building))
{
<td>
@Html.CheckBoxFor(model => @Model.GetEmployee(employee).IsChecked)
@Html.HiddenFor(model => @Model.GetEmployee(employee).LastName)
@Html.HiddenFor(model => @Model.GetEmployee(employee).FirstName)
@Html.HiddenFor(model => @Model.GetEmployee(employee).EmployeeId)
@Html.HiddenFor(model => @Model.GetEmployee(employee).Building)
@employee.LastName, @employee.FirstName
</td>
}
</tr>
}
</table>
<input type="submit" value="sub" />
}
我希望它能退回上面的模型。相反,它返回Employee的空列表。我确信我错过了一些愚蠢的东西,但我不明白是什么。
接收端的控制器看起来像:
public ActionResult TrainingDetail(Models.IndexModel indexModel)
{
if (indexModel.Employees == null)
{
ViewBag.Message = "EMPTY FOO";
return View();
}
int count = indexModel.Employees.Where(x => x.IsChecked == true).Count();
ViewBag.Message = count.ToString();
return View();
}
我怀疑我没有掌握的是,如何在视图中创建一个Employee,使其填充一个强类型列表。还是我完全误解了这些概念?
它似乎完全围绕着成为一个列表,因为我可以很容易地传递简单的数据——但当我得到这个列表时,它是空的,然而我的谷歌功能让我失望了,所以我恳求你们,我的兄弟们,帮助我。
我认为要在模型绑定过程中对实体列表进行水合,实体属性的名称需要以这样的索引作为前缀:
@Html.CheckBoxFor(model => model.Employees[0].IsChecked)
@Html.HiddenFor(model => model.Employees[0].LastName)
@Html.HiddenFor(model => model.Employees[0].FirstName)
@Html.HiddenFor(model => model.Employees[0].EmployeeId)
@Html.HiddenFor(model => model.Employees[0].Building)
MVC就是这样知道创建一个新的EmployeeForList
实体并将其添加到Employees
列表中的。
注意:此处的model
应为IndexModel
。