我有一个页面,您可以在其中添加公司。一家公司有多名员工。这是我的 View 模型:
public class CompanyViewModel
{
[ScaffoldColumn(false)]
public int CompanyId { get; set; }
public string Name{ get; set; }
public List<EmployeeViewModel> Employees { get; set; }
}
public class EmployeeViewModel
{
[ScaffoldColumn(false)]
public int EmployeeId { get; set; }
public int CompanyId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
在我的页面上,我有动态添加/删除员工的 jQuery 功能。当我发布表单时,我的 View 如下所示:
<input id="CompanyId" name="CompanyId" type="hidden" value="0" />
<input id="Name" name="Name" type="text" value="Test company name" />
<input id="Employees[1].FirstName" name="Employees[1].FirstName" type="text" value="fn1" />
<input id="Employees[1].LastName" name="Employees[1].LastName" type="text" value="ln1" />
<input id="Employees[2].FirstName" name="Employees[2].FirstName" type="text" value="fn2" />
<input id="Employees[2].LastName" name="Employees[2].LastName" type="text" value="ln2" />
<input id="Employees[3].FirstName" name="Employees[3].FirstName" type="text" value="fn3" />
<input id="Employees[3].LastName" name="Employees[3].LastName" type="text" value="ln3" />
还有我的 Controller 方法:
[HttpPost]
public ActionResult Create(CompanyViewModel viewModel)
{
...
}
当我在发布表单后通过调试器查看 View 模型中的内容时,Employees 集合为空。 CompanyId 和 Name 被传递,但不传递 Employees 集合。
我还尝试将输入的 ID 和名称从 Employees[1].FirstName 更改为 Model.Employees[1].FirstName,但那没有'帮助。
我在这里做错了什么?
我正在使用 MVC 3 和 Razor。
请您参考如下方法:
我可能是错的,但我是这样处理的。
创建一个局部 View 以显示所有员工。 创建局部 View 以显示单个员工。
将员工模型传递给员工分部 View ,该分部 View 依次循环并为每个员工呈现员工分部 View 。
然后在运行时,当用户添加员工时,我使用 jQuery ajax 回发到 Controller 。
Controller 添加员工并返回呈现的员工部分控制。
ajax 调用成功,然后(附加)新员工部分 View html 到已经存在的员工列表中。
我的 View 采用包含公司和 List<Employee> 的表单 View 模型
编辑
但是,您可能会考虑为您的 Controller 使用 [bind] 装饰器。
[Bind(Prefix="ContactDetails")] userDetail UserDetail
编辑2
删除员工姓名上的编号。然后在您的 Controller 中,您可以使用以下内容
[HttpPost]
public ActionResult Create(CompanyViewModel viewModel, [Bind(Prefix="Employees")] List<EmployeeViewModel> Employees)
{
...
}
这是我在另一个项目中使用类似的东西的方式
