Razor:在foreach循环中获取上一个/下一个对象属性

时间:2015-07-01 14:00:41

标签: c# asp.net-mvc razor foreach

我不知道这是否有可能以任何有意义的方式实现,但我会尝试在这里问,因为我似乎无法在谷歌中找到任何相关信息。

我有一个" foreach"在cshtml视图中循环,我想在滑块中显示一些内容。在该滑块中,不仅显示了箭头,而且还显示了下一张和上一张幻灯片的名称。

它看起来像这样:

@foreach (var stop in Model.Accomodations)
{
    <div class="slider controls-above two-column">
        @foreach (var hotel in stop.Hotel_Options)
        {
                <div class="names">
                    <span class="prev">@* previous slides name *@</span>
                    <span class="current">@* Current slides name*@</span>
                    <span class="next">@* Next slides name *@</span>
                </div>       
        }
    </div>
}

为清晰起见,我删除了一些HTML。

所以我的问题是,内部foreach循环是否有可能获得前一个和下一个项目的名称相对于它正在迭代的当前项目? 换句话说:酒店列表显示在滑块中,是否可以从环路正在查看的酒店获取下一个或上一个酒店的名称?

(或者我应该选择基于Javascript的解决方案?)

修改 根据反馈,我修复了它:

@foreach (var stop in Model.Accomodations)
{
    <div class="slider controls-above two-column">
        @for (int i = 0; i < stop.Hotel_Options.Count(); i++)
        {
            <div>
                <div class="names">
                    <span class="prev">
                        @{var previousHotel = stop.Hotel_Options.ElementAtOrDefault(i - 1);}
                        @if (previousHotel != null)
                        {
                            @previousHotel.Name
                        }
                    </span>
                    <span class="current">@stop.Hotel_Options.ElementAt(i).Name</span>
                    <span class="next">
                        @{var nextHotel = stop.Hotel_Options.ElementAtOrDefault(i + 1);}
                        @if (nextHotel != null)
                        {
                            @nextHotel.Name
                        }
                    </span>
                </div>
    </div>
}

1 个答案:

答案 0 :(得分:3)

如果Model.Accomodations是一个数组,您可以使用for loop并使用[i-1][i+1]来获取上一个和下一个数据。

只需添加if即可检查您是否位于第一个或最后一个元素。