我在MVC 3和EF 4.1工作,而且我是初学者。
所以我宣布了这两个类:
public class Genre
{
[Key]
public int GenreId { get; set; }
public string Name { get; set; }
public virtual List<Show> Shows { get; set; }
}
和
public class Show
{
[Key]
public int ShowId { get; set; }
public string Title { get; set; }
public virtual int[] GenreIds { get; set; }
public virtual List<Genre> Genres { get; set; }
}
现在我正在尝试显示特定节目的详细信息,并通过已标记的节目显示循环和显示。我有一个标准的详细信息视图,我正在使用,所以我将以下内容传递给它,来自控制器:
public ViewResult Details(int id)
{
Show show = db.Shows.Find(id);
return View(show);
}
我正在使用这个Razor循环来显示流派:
@foreach (ShowCat.Models.Genre Genre in Model.Genres)
{
@Html.Display(Genre.Name)
}
绝对没有任何事情发生......
没有显示类型......
请帮忙!
答案 0 :(得分:2)
HTML帮助器Html.Display(string expression)
要求您传入模型属性的名称,而不是属性的值。通过将Genre.Name
传递给方法,您传递的内容类似于“重金属”,这显然不是模型中任何属性的名称。
最简单的解决方法是将Html.Display
替换为Html.DisplayFor
:
@foreach (ShowCat.Models.Genre Genre in Model.Genres)
{
@Html.DisplayFor(model => Genre.Name)
}
答案 1 :(得分:0)
您是否已禁用延迟加载?
如果是这样,您可能需要急切加载类型:
var show = db.Shows.EagerLoad(x => x.Genres).SingleOrDefault(id);
还有:
@foreach (ShowCat.Models.Genre Genre in Model.Genres)
{
@Html.Display(Genre.Name)
}
可以缩短为:
@Html.DisplayFor(model => model.Genres)
为“Genre”添加编辑器模板:(Genre.cshtml)
@Html.DisplayFor(model => model.Name)