public class EmployeeViewModel
{
public Employee Employee { get; set; }
public IList<Address> Addresses { get; set; }
}
控制器: -
[HttpPost]
public ActionResult InsertAddress(EmployeeViewModel model)
{
//code for insert data into db
}
查看: -
这里我想通过将多个地址对象和单个员工对象从视图传递给控制器来调用InsertAddress操作。
有可能吗?
答案 0 :(得分:3)
您只需要使用正确的模型绑定器命名约定来理解。
Property.Property
或者
属性[index]。集合的属性
如果index不是基于顺序0,则需要添加隐藏字段,Property.Index和索引值
示例:
<input name="Employee.Name" value="1234 5678"/>
<input name="Employee.Phone value="1234 5678"/>
<input name="Employee.Email" value="me@example.com"/>
<input name="Addresses.Index" value="0" type="hidden"/>
<input name="Addresses[0].Suburb" value="Melbourne"/>
<input name="Addresses[0].Postcode" value="3000"/>
<input name="Addresses.Index" value="1" type="hidden"/>
<input name="Addresses[1].Suburb" value="Sydney"/>
<input name="Addresses[1].Postcode" value="2000"/>
插入行时,只需使用命名约定,不要忘记添加.Index字段。
如果为Address类创建自定义EditorTemplate,大多数默认的EditorFor将透明地为您处理所有这些。
答案 1 :(得分:2)
是的,但是你需要做一些工作。
您不需要为模型创建单个视图(使用地址的某种循环),而是需要为Address类创建EditorTemplate,然后在主视图中使用@Html.EditorFor(m => m.Addresses)
此设置将导致您的EmployeeViewModel
实例返回到包含完整地址列表的操作(而不是空的)。
答案 2 :(得分:0)
我在绑定复杂模型时提到了一些常见问题,请看这里 http://jayakarant.blogspot.de/2014/05/handling-complex-view-models-in-razor.html