1

我最近从 4.09 升级到 Umbraco 4.10。我有一个非常常见/简单的小宏,用于生成我的顶部导航。我检查记录以查看它是否是计数中的最后一个,如果不是,则添加管道符号作为可视分隔符。这在 4.09 之前的所有版本中都按预期工作,但在升级所有项目后,即使是最后一个项目也会得到管道符号。

@inherits umbraco.MacroEngines.DynamicNodeContext

@{ 
  var level = String.IsNullOrEmpty(Parameter.Level) ? 1 : int.Parse(Parameter.Level); 
  var ulClass = String.IsNullOrEmpty(Parameter.UlClass) ? "" : String.Format(" class=\"{0}\"", Parameter.UlClass); 
  var parent = @Model.AncestorOrSelf(level);
  var pages = parent.Children.Where("Visible");
  if (parent != null) {
    <ul class="topNav">
    @foreach (var item in pages) {
        var selected = Array.IndexOf(Model.Path.Split(','), item.Id.ToString()) >= 0 ? " class=\"selected\"" : "";
        if (item != (pages.Last()))
        {
          <li@Html.Raw(selected)>
            <a href="@item.Url">@item.Name |</a>
          </li>
        }
        else
        {
           <li@Html.Raw(selected)>
            <a href="@item.Url">@item.Name</a>
          </li>
        }
      }
    </ul>
  }
}

我不确定发生了什么变化,但似乎(在我的代码中)pages.Last() 从来都不是真的。
有人有想法么?- 谢谢

4

2 回答 2

1

您应该能够使用IsNotLast()帮助程序获得所需的结果,如下所示:

<li@Html.Raw(selected)>
    <a href="@item.url">@item.Name@(item.IsNotLast() ? " |" : "")</a>
</li>

有关可用的 IsHelpers 的更多信息,请参阅Umbraco Razor 功能演练 - 第 7 部分。当您需要有关正在遍历的节点的信息时,它们非常方便。

于 2012-11-17T05:40:48.440 回答
0

我最终采取了一些不同的做法,但我仍然不知道为什么会发生这种变化。

代替

if (item != (pages.Last()))

我和

if (item.Index() != (pages.Count()-1))

目前已解决,但如果其他人偶然发现此问题,我欢迎任何反馈

于 2012-11-16T17:29:19.977 回答