1

我有一个使用用户对象作为模型的部分模板。用户有一组帐户。在这个部分模板上,我有一个如下循环。_Account 部分模板绑定到 Account 类

  @foreach (var item in Model.Accounts)
            { 
                <tr>
                    <td colspan="6">
                        <div>
                            @Html.Partial("_Account", item)
                        </div>
                    </td>
                </tr>

            }

在我最初尝试的控制器方法中

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UserDetails(User user, string actionType)

但是 User.Accounts 集合是空的。然后我尝试了这个。Accounts 集合仍然是空的。

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UserDetails(User user,  
                             [Bind(Prefix="User.Accounts")]
                             FixupCollection<Account> Accounts, 
                             string actionType)

我可以使用默认的 Modelbinder 实现来实现这一点,还是需要做一些不同的事情?

4

2 回答 2

4

是的,您可以使用默认的模型绑定器。您只需要正确命名您的字段。所以你需要你的循环输出这样的东西:

...
<input type="text" name="user.Accounts[0].SomeTextField" />
<input type="text" name="user.Accounts[0].SomeOtherTextField" />
...
<input type="text" name="user.Accounts[1].SomeTextField" />
<input type="text" name="user.Accounts[1].SomeOtherTextField" />
...

如果您需要添加/删除帐户,硬编码索引会变得有点棘手。您可以在回发之前使用 javascript 重新分配名称。但这一切皆有可能。这个问题提供了有关模型绑定的更多详细信息:

ASP.NET MVC:将复杂类型绑定到选择

于 2011-04-11T15:17:45.883 回答
0

使用编辑器模板而不是部分视图 - 无需对索引进行硬编码,因为模板会自动正确索引所有对象,即使您添加和删除帐户也是如此。看我对这个问题的回答:

从多个局部视图传递值

在这里对编辑器模板进行小写:

codenodes.wordpress.com - MVC3 编辑器模板

于 2012-09-07T13:33:36.803 回答