【问题标题】:ASP.Net Razor ViewASP.Net 剃刀视图
【发布时间】:2011-06-26 03:12:39
【问题描述】:

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

我从他们的 RestAPI 中提取了我的 Last.FM 数据并将其缓存(仅当缓存超过 30 分钟时才会刷新),然后我将其加载到枚举的曲目列表中。

我试图在 Razor 显示中删除该逻辑,但从未设法使其仅与 foreach 和 if (item.image...)... 一起工作,添加逻辑以删除divs 导致 razor 丢失了 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; }
        }

我称之为恶作剧!

【问题讨论】:

  • 试试把x.item改成x.Item,我觉得是这个问题
  • 打我的头...谢谢你握着我的手,不敢相信我错过了。

标签: asp.net razor


【解决方案1】:

如果您尝试以 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 来将项目分组。

【讨论】:

  • 有趣,您在剃刀中删除了一个带有 lambda 的 linq 查询...我不知道您可以这样做...唯一的事情是,它不是识别 x,就像它超出范围一样。不过,我会继续破解这个问题。感谢您的想法,它比我的想法更容易阅读。
  • 有一个小错误,循环内的if不应该有@,我已经测试过了。
  • 和 cmets 吃掉了我的代码,所以我用它来更新我的问题。
猜你喜欢
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2011-10-10
  • 2012-07-22
  • 1970-01-01
相关资源
最近更新 更多