在视图中获取另一个模型的模型名称和标题

时间:2016-02-06 10:44:08

标签: asp.net-mvc entity-framework

我想在局部视图中获取模型类型的名称和模型列表的标题,但@ genre.Lists.Title不起作用 这是我的流派模型

  public class Genre
{
    public int GenreId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public List<List> Lists { get; set; }
}

这是我的List模型

 [Bind(Exclude = "ListId")]
public class List
{
    [ScaffoldColumn(false)]
    public int ListId { get; set; }
    [DisplayName("Genre")]
    public int GenreId { get; set; }
    [DisplayName("Maker")]
    public int MakerId { get; set; }
    [Required(ErrorMessage = "An List Title is required")]
    [StringLength(160)]
    public string Title { get; set; }
    [Required(ErrorMessage = "Price is required")]
    [Range(0.01, 100.00,ErrorMessage = "Price must be between 0.01 and 100.00")]
    public decimal Price { get; set; }
    [DisplayName("List URL")]
    [StringLength(1024)]
    public string ListUrl { get; set; }
    public Genre Genre { get; set; }
    public Maker Maker { get; set; }
    public virtual List<OrderDetail> OrderDetails { get; set; }
}

这是我的actionResult

  public ActionResult Navbar()
    {

        var genres = storeDB.Genres.Include("Lists").ToList();



        return PartialView("Navbar",genres);
    }

这是我的PartialView

    @model IEnumerable<Store.Models.Genre>
    @foreach (var genre in Model)
    {
        @genre.Name
        @genre.Lists.Title
    }

1 个答案:

答案 0 :(得分:2)

@genre.Lists的类型为List<List>,而不是List(顺便说一下,我会以某种方式重命名您的类,它很容易与此标准库类混淆名称)。

因此,您需要另一个foreach循环来迭代@genre.Lists,或者您可以使用@genre.Lists[0].Title获取第一个元素。它取决于你真正想要实现的目标。例如,您可以使用string.Join

@model IEnumerable<Store.Models.Genre>
@foreach (var genre in Model)
{
    <text>
        @genre.Name
        @string.Join(", ", genre.Lists.Select(x => x.Title))
    </text>
}

或者写一些真正的HTML。同样,取决于你想要的输出。