【问题标题】:How to exclude a single node id from a loop of CurrentPage.Children如何从 CurrentPage.Children 的循环中排除单个节点 ID
【发布时间】:2018-03-26 12:11:12
【问题描述】:

我有一个模板,我希望在其中显示所有 CurrentPage 的子节点,除了 Id = 1234 的单个节点。

我当前的代码:

 @{
   foreach( var child in CurrentPage.Children.Take(6) ){

   Html.Partial("Archive/Post", new ViewDataDictionary {{ "item", (object)child }} )

        }
   }

所以基本上我正在尝试做类似的事情:CurrentPage.Children.Take(6).Where(Id != 1234)

【问题讨论】:

  • “所以基本上我正在尝试做类似的事情:CurrentPage.Children.Take(6).Where(Id != 1234)” - 似乎是一个不错的选择,这有什么问题?
  • 当我尝试这样做时出现错误:“CS0103 名称 'Id' 在给定的上下文中不存在”
  • 试试CurrentPage.Children.Take(6).Where(x => x.Id != 1234)
  • 所以你只完成了 5 个节点 :-)

标签: c# umbraco umbraco7


【解决方案1】:

Where 方法需要一个谓词(通常作为 lambda 表达式提供):

CurrentPage.Children.Take(6).Where(c => c.Id != 1234)

根据您的评论,我得出的结论是 CurrentPagedynamicChilderndynamic。由于you can't use lambda expressions with dynamic,您可以采用老式方式,只需在循环内添加条件:

@{
    foreach( var child in CurrentPage.Children.Take(6) )
    {
      if(child.Id != 1234)
          Html.Partial("Archive/Post", new ViewDataDictionary {{"item", (object)child}});
    }
}

【讨论】:

  • 执行此操作时,我得到:编译器错误消息:CS1977:无法使用 lambda 表达式作为动态调度操作的参数,除非先将其转换为委托或表达式树类型
  • CurrentPage 是否声明为 dynamic
  • 我试过了:动态 myPage = CurrentPage;然后引用 myPage.Children 代替,但没有效果。我对 Umbraco 很陌生,所以这可能是相当微不足道的 :( 我首先尝试了上面的解决方案,我只是在 foreach 循环中检查 ID,但想尽量避免这种情况,因为它稍后会在我的模板中引起一些问题.
  • 这里真的需要dynamic吗?我对 Umbarco 一无所知,但我知道在大多数情况下,使用dynamic 应该被视为最后的手段。
  • 当您不想在 Umbraco 中使用动态时,很高兴知道未来。您可以使用Model.Content 代替CurrentPage。这将返回一个 IPublishedContent 类型的对象,这样您在 Visual Studio 中的智能感知将帮助您很多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多