我有一个视图,用户可以通过选择复选框来选择任意数量的俱乐部。俱乐部是主模型的属性,类型为 List <ClubModel
>。在重构时,我从这个开始:
@using (Html.BeginForm())
{
<fieldset>
<legend>Voor Select clubs </legend><br />
<table>
<tr>
@for (var i = 0; i < Model.Clubs.Count; i++)
{
if (i % 3 == 0)
{
@:</tr><tr>
}
<td>
@Html.HiddenFor(model => model.Clubs[i].ClubID)
@Html.EditorFor(model => model.Clubs[i].IsAvailable)
</td>
<td>@Html.DisplayFor(model => model.Clubs[i].ClubName)</td>
}
</tr>
</table>
<input type="submit" value="Submit" />
</fieldset>
}
这很好用:模型返回一个填充的 Clubs 属性。
现在我取出 <td
> 标签并将它们移动到 EditorTemplate:
@using (Html.BeginForm())
{
<fieldset>
<legend>Select Clubs </legend><br />
<table>
<tr>
@for (var i = 0; i < Model.Clubs.Count; i++)
{
if (i % 3 == 0)
{
@:</tr><tr>
}
@Html.EditorFor(model=>model.Clubs[i])
}
</tr>
</table>
<input type="submit" value="Submit" />
</fieldset>
}
这仍然有效(模板未显示)。
现在我也想将循环移动到 EditorTemplate:
@using (Html.BeginForm())
{
<fieldset>
<legend> Select Clubs</legend><br />
<EditorFor(model=>model.Clubs,"ListOfClubs")
<input type="submit" value="Submit" />
</fieldset>
}
我正式创建了一个名为“ListOfClubs”的 EditorTemplate:
@using InvallersManagementMVC3.ViewModels;
@model List<StandInClubModel>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<table>
<tr>
@for (var i = 0; i < Model.Count; i++)
{
if (i % 3 == 0)
{
@:</tr><tr>
}
<td>
@Html.HiddenFor(model => model[i].ClubID)
@Html.EditorFor(model => model[i].IsAvailable)
</td>
<td>@Html.DisplayFor(model => model[i].ClubName)</td>
}
</tr>
</table>
</body>
</html>
这正确显示了带有 IsAvailable 属性复选框的俱乐部,但现在发布模型的 Clubs 属性为空!
我哪里错了?
编辑:我试图通过使用来实现 Cymen 的答案:
@Html.EditorFor(model=>model.Clubs,"ClubModel")
或者在传入这些元素的列表时指定元素模板。然而,我遇到了一个异常:System.InvalidOperationException 未被用户代码处理 Message=传递到字典中的模型项的类型为“System.Collections.Generic.List`1[InvallersManagementMVC3.ViewModels.ClubModel]”,但是这本字典需要“InvallersManagementMVC3.ViewModels.ClubModel”类型的模型项。