升级到4.10后宏断开

时间:2012-11-15 20:21:39

标签: razor umbraco

我最近从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()永远不会是真的。
有人有主意吗? - 谢谢

2 个答案:

答案 0 :(得分:1)

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

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

有关可用的IsHelper的更多信息,请参阅Umbraco Razor Feature Walkthrough–Part 7。当您需要有关正在遍历的节点的信息时,它们非常方便。

答案 1 :(得分:0)

我最后还是有点不同,但我仍然不知道为什么会改变它。

而不是

  

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

我去了

  

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

现在解决了,但如果有其他人在这个问题上遇到障碍,我欢迎任何反馈