根据他们的ID对项目进行分组

时间:2014-03-27 13:07:46

标签: asp.net-mvc razor-2

我正在尝试通过id将剃须刀视图中的项目分组并将它们全部放在一个div中 我做了什么把每个人放在一个div。

  <div class="tab-content" id="myTabContent">

    @foreach (var item in Model)
    {

        <div class="tab-pane fade active in" id="genreTab ">
            if (item.GenreId == 1)
            {

            @item.GenreId

            }
        </div>
        if (item.GenreId == 2)
        {
            <div class="tab-pane fade " style="background-color:red;" id="genreTab ">
                @item.GenreId

            </div>

        }


    }
</div>

简短的课程:

public class Genre
{
    public int GenreId { get; set; }

    public string GenreName { get; set; }
    public List<TakeAway> TakeAwys { get; set; }
}

public class TakeAway
{
    public int TakeAwayId { get; set; }

    public int GenreId { get; set; }
    public virtual Genre genre { get; set; }
}

2 个答案:

答案 0 :(得分:1)

如果可能的话,最好的办法是循环播放您的流派而不是您的项目。您可以通过按类型对模型中的项目进行分组来实现此目的。

然后,在您的视图中循环播放您的流派,并在当前流派中使用您内容的内部循环。

这样的事情:

@foreach (var genre in Model.Genres)
{
    <div class="tab-pane fade active in" id="genreTab ">
    @foreach (var item in genre.Items)
    {
        @item.SomeValueHere
    }
    </div>
}

或者,如果你被迫像OP那样收到你的物品,就像我讨厌在视图中做这样的代码一样,使用LINQ在你的视图中将它们分组可能是罪恶中的较小者:

@foreach (var genre in Model.GroupBy(i => i.GenreId).Select(i => i.Key))
{
    var innerGenre = genre; //to prevent modifed closure
    <div class="tab-pane fade active in" id="genreTab ">
    @foreach (var item in Model.Where(i => i.GenreId == innerGenre))
    {
        @item.SomeValueHere
    }
    </div>
}

答案 1 :(得分:0)

ID(genreTab)应该是唯一的。如果你想要一个div中的所有,你必须先订购它们。

全部订购后,请执行以下操作:

var lastId = 0;

<div class="tab-pane fade " style="background-color:red;" id="genreTab-@item.GenreId">
@foreach (var item in Model)
{
    if (@item.GenreId != lastId)
    {
        </div><div class="tab-pane fade " style="background-color:red;" id="genreTab-@item.GenreId">
    }
    @item.GenreId

    lastId = @item.GenreId;
}
</div>

语法可能有误,我不知道剃刀语法。