Entity Framework Code First を使用してデータベースを生成しているため、次のように定義されたオブジェクトがあります。
public class Band
{
public int Id { get; set; }
[Required(ErrorMessage = "You must enter a name of this band.")]
public string Name { get; set; }
// ...
public virtual ICollection<Genre> Genres { get; set; }
}
今、私はこのための作成ビューを見ていますが、デフォルトの足場は私のフォームにジャンルを追加していません。これは、過去の経験から、私が期待していることです。
オンラインで見ると、 Using ASP.NET MVC v2 EditorFor and DisplayFor with IEnumerable<T> Generic typesが見つかりました。これは、私が望むものに最も近いようですが、 ASPごとにRazorおよびおそらくMVC 3では意味がないようです。 UIHint を使用した NET MVC 3 カスタム表示テンプレート - For ループが必要ですか? .
現在、ジャンルのリストを ViewBag に追加してから、作成ビューでそのリストをループします。
@{
List<Genre> genreList = ViewBag.Genres as List<Genre>;
}
// ...
<ul>
@for (int i = 0; i < genreList.Count; i++)
{
<li><input type="checkbox" name="Genres" id="Genre@(i.ToString())" value="@genreList[i].Name" /> @Html.Label("Genre" + i.ToString(), genreList[i].Name)</li>
}
</ul>
ユーザーが JavaScript を無効にしてチェックボックスを再チェックする必要があるケースをまだ処理しておらず、実際にこの情報でデータベースを更新すると、希望どおりにジャンルが出力されます。
しかし、MVC 3 がどれだけ優れたものになったかを考えると、これは正しくないと感じます。
では、MVC 3 でこれを処理する最も効果的な方法は何ですか?