ユーザーがcheckboxexを選択することで、任意の数のクラブを選択できるビューがあります。クラブは、タイプリスト<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プロパティはnullになります。
どこが間違っているのですか?
編集:私は以下を使用してCymenの答えを実装しようとしました:
@Html.EditorFor(model=>model.Clubs,"ClubModel")
または、これらの要素のリストを渡すときにelementtemplateを指定します。ただし、例外が発生しました。System.InvalidOperationExceptionはユーザーコードによって処理されませんでした。Message=ディクショナリに渡されるモデルアイテムのタイプは'System.Collections.Generic.List`1 [InvallersManagementMVC3.ViewModels.ClubModel]'ですが、このディクショナリはタイプ'InvallersManagementMVC3.ViewModels.ClubModel'のモデルアイテムが必要です。