【发布时间】:2011-11-05 23:42:51
【问题描述】:
我使用 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 似乎最接近我想要的,但似乎对 Razor 和可能的 MVC 3 没有意义,根据 ASP.NET MVC 3 Custom Display Template With UIHint - For Loop Required?。
目前我已将流派列表添加到 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 中处理这个问题的最有效方法是什么?
【问题讨论】:
标签: asp.net-mvc-3 razor icollection