我有一个使用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实现来实现这一点,还是需要做任何不同的事情?
答案 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重新分配名称。但这一切都是可能的。这个问题提供了有关模型绑定的更多细节:
答案 1 :(得分:0)
使用编辑器模板而不是部分视图 - 无需对索引进行硬编码,因为模板会自动为所有对象自动编制索引,即使您添加和删除帐户也是如此。看看我对这个问题的回答:
Pass values from multiple partial views
在编辑器模板上小写: