0
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 操作。

是否可以 ?

4

3 回答 3

3

您只需要使用正确的命名约定来让模型绑定器理解。

财产.财产

或者

属性[索引]. 集合的属性

如果索引不是基于 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 将为您透明地处理所有这些。

于 2013-01-31T13:35:03.747 回答
2

是的,有可能,但需要您做一些工作。

您需要为您的 Address 类创建一个 EditorTemplate ,然后在主视图中使用@Html.EditorFor(m => m.Addresses)

此设置将导致您的EmployeeViewModel实例返回到包含完整地址列表(而不是为空)的操作。

于 2013-01-31T13:33:43.420 回答
0

我在绑定复杂模型时提到了一些常见问题,请看这里 http://jayakarant.blogspot.de/2014/05/handling-complex-view-models-in-razor.html

于 2014-05-24T23:39:05.033 回答