ASP.Net MVC3父子模型绑定

时间:2011-04-11 15:09:19

标签: asp.net-mvc-3 razor model-binding defaultmodelbinder

我有一个使用User对象作为模型的部分模板。用户拥有一组帐户。在这个局部模板上,我有一个循环如下。 _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集合为空。然后我尝试了这个。仍然是帐户集合是空的。

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

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

2 个答案:

答案 0 :(得分: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: Binding a Complex Type to a Select

答案 1 :(得分:0)

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

Pass values from multiple partial views

在编辑器模板上小写:

codenodes.wordpress.com - MVC3 Editor Templates