ASP.Net Razor View

时间:2011-06-26 03:12:39

标签: asp.net razor

我可能做错了......所以请纠正我,如果我。

我从他们的RestAPI中提取了我的Last.FM数据并将其缓存(仅在缓存大于30分钟时才刷新),并从那里将其加载到一个枚举的轨道列表中。 / p>

我试图在Razor显示中删除该逻辑,并且从未设法使其不仅仅使用foreach和if(item.image ...)...,添加逻辑以删除divs已经导致剃刀松开了对foreach的结束括号。

我这太复杂了吗?

       <!-- lfm data -->
            @* Iterate over the Last.FM data and display it in an attractive format *@
@foreach (var group in Model.Select((x, i) => new { Group = i / 4, Item = x })
                            .GroupBy(x => x.Group)) {
    <div class="LFM-Data">
    foreach(var x in group) {
        if (x.item.image != null) {
            <img src="@x.item.image.ToString()" class="lfm-artwork" alt="@x.item.album"/>
        } else {
            <img src="/Content/images/lfm/NoAlbumArt.jpg" class="lfm-artwork" alt="No Album Art Available" />
        }
        <p>@Html.Raw(x.item.name.ToString())</p>
    }
    </div>
 }

按照Equiso的建议,我得到一个奇怪的范围问题,其中X不在当前范围内,或者x不包含图像属性...

@model IEnumerable<CCBlog.Classes.LastFmWrapper.Track>

这是LFM Wrapper类的一部分---我在

之后对数据进行建模
 public struct Track
        {
            public string artist { get; set; }
            public string name { get; set; }
            public string album { get; set; }
            public string image { get; set; }
        }

我称之为恶作剧!

1 个答案:

答案 0 :(得分:2)

如果您尝试以4个为一组显示项目,可以像这样做

@foreach (var group in Model.Select((x, i) => new { Group = i / 4, Item = x })
                            .GroupBy(x => x.Group)) {
    <div class="LFM-Data">
    foreach(var x in group) {
        if (x.Item.image != null) {
            <img src="@x.Item.image.ToString()" class="lfm-artwork" alt="@x.Item.album"/>
        } else {
            <img src="/Content/images/lfm/NoAlbumArt.jpg" class="lfm-artwork" alt="No Album Art Available" />
        }
        <p>@Html.Raw(x.Item.name.ToString())</p>
    }
    </div>
 }

或者您可以创建一个ViewModel来获取已经分组的项目。