EditorTemplate para Lista de tipos complexos retorna nulo, enquanto EditorTemplate para seus elementos funciona bem
Tenho uma visualização na qual o usuário pode escolher qualquer número de clubes selecionando checkboxex. Os clubes são uma propriedade do modelo principal com o tipo List<ClubModel
>. Durante a refatoração, começo com isso:
@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>
}
Isso funciona bem: o modelo é retornado com uma propriedade Clubs preenchid
Agora eu tiro o<td
> e mova-as para um 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>
}
Isto ainda funciona (modelo não mostrado
gora, também quero mover o loop para um EditorTemplate:
@using (Html.BeginForm())
{
<fieldset>
<legend> Select Clubs</legend><br />
<EditorFor(model=>model.Clubs,"ListOfClubs")
<input type="submit" value="Submit" />
</fieldset>
}
Crio devidamente um EditorTemplate chamado 'ListOfClubs':
@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>
Isso mostra corretamente os clubes com caixas de seleção para a propriedade IsAvailable, mas agora ao postar a propriedade Clubs do modelo é nula!
Onde eu estou errando
EDIT: Tentei implementar a resposta do Cymen usando:
@Html.EditorFor(model=>model.Clubs,"ClubModel")
ou especificando o template do elemento ao passar em uma lista desses elementos. No entanto, sou recebido por uma exceção: System.InvalidOperationException não foi tratado pelo código do usuário Message = O item de modelo passado no dicionário é do tipo 'System.Collections.Generic.List`1 [InvallersManagementMVC3.ViewModels.ClubModel]', mas este dicionário requer um item de modelo do tipo 'InvallersManagementMVC3.ViewModels.ClubModel'.