我使用 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 和 DisplayFor with IEnumerable<T> Generic types这似乎最接近我想要的,但对于 Razor 和 MVC 3 似乎没有意义,每个ASP。 NET MVC 3 带有 UIHint 的自定义显示模板 - 需要 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 中处理这个问题的最有效方法是什么?