C# 获取列表中的上一项

C# 获取列表中的上一项,c#,sitecore,C#,Sitecore,我已经完成了上一个/下一个设置,下一个功能运行良好(尽管这是不久前由其他人创建的)。至于上一个按钮,这给了我一些问题 以下是迄今为止的代码: private Item getPrevious() { Item CurrentItem = Sitecore.Context.Item; var blogHomeID = "{751B0E3D-26C2-489A-8B8C-8D40E086A970}"; Item BlogItem =db

我已经完成了上一个/下一个设置,下一个功能运行良好(尽管这是不久前由其他人创建的)。至于上一个按钮,这给了我一些问题

以下是迄今为止的代码:

    private Item getPrevious()
    {
        Item CurrentItem = Sitecore.Context.Item;
        var blogHomeID = "{751B0E3D-26C2-489A-8B8C-8D40E086A970}";
        Item BlogItem =db.Items.GetItem(blogHomeID);
        Item[] EntryList= BlogItem.Axes.SelectItems("descendant::*[@@templatename='BlogEntry']");

        Item prevEntry = null;

        for (int i = 0; i < EntryList.Length; i++)
        {
            if (EntryList[i] == CurrentItem)
            {
                return prevEntry;
            }

            prevEntry = EntryList[i];
        }
    }
private Item getPrevious()
{
Item CurrentItem=Sitecore.Context.Item;
var blogHomeID=“{751B0E3D-26C2-489A-8B8C-8D40E086A970}”;
Item BlogItem=db.Items.GetItem(blogHomeID);
Item[]EntryList=BlogItem.Axes.SelectItems(“后代::*[@@templatename='BlogEntry']);
Item prevEntry=null;
for(int i=0;i

我知道您需要从列表中的当前项中减去1才能得到上一个,但到目前为止,所有这些似乎都是为上一个按钮显示完全相同的条目。它总是列表中的最新条目,而不是前一条。我觉得这应该不会太难,但可能是我正在尝试使用的旧代码。不确定。

您缺少停止列表中搜索的条件,因此始终返回列表中的最后一项

Item  prevEntry  = null;
for (int i = 0; i < EntryList.Length; i++)
{          
     if (EntryList[i] == CurrentItem)   
     {
         return prevEntry;
     }         

     prevEntry  = EntryList[i];
}
Item prevEntry=null;
for(int i=0;i
您缺少停止列表中搜索的条件,因此始终返回列表中的最后一项

Item  prevEntry  = null;
for (int i = 0; i < EntryList.Length; i++)
{          
     if (EntryList[i] == CurrentItem)   
     {
         return prevEntry;
     }         

     prevEntry  = EntryList[i];
}
Item prevEntry=null;
for(int i=0;i
您可以使用
GetPreviousSibling()
GetNextSibling()方法:

Sitecore.Context.Item.Axes.GetPreviousSibling()

Sitecore.Context.Item.Axes.GetNextSibling()
它们将返回上一个和下一个同级,如果当前项分别是第一个/最后一个,则返回null

如果要按模板类型进行限制,则可以使用前面的
和后面的
xpath查询:

Item previous = Sitecore.Context.Item.Axes.SelectItems("./preceding::*[@@templateid='{template-guid}']").LastOrDefault();

Item next = Sitecore.Context.Item.Axes.SelectSingleItem("./following::*[@@templateid='{template-guid}']");

注意在第一次查询中使用了
SelectItems
LastOrDefault()
。这两个查询都提供按顺序排序的项目列表。

您可以使用
GetPreviousSibling()
GetNextSibling()
方法:

Sitecore.Context.Item.Axes.GetPreviousSibling()

Sitecore.Context.Item.Axes.GetNextSibling()
它们将返回上一个和下一个同级,如果当前项分别是第一个/最后一个,则返回null

如果要按模板类型进行限制,则可以使用前面的
和后面的
xpath查询:

Item previous = Sitecore.Context.Item.Axes.SelectItems("./preceding::*[@@templateid='{template-guid}']").LastOrDefault();

Item next = Sitecore.Context.Item.Axes.SelectSingleItem("./following::*[@@templateid='{template-guid}']");

注意在第一次查询中使用了
SelectItems
LastOrDefault()
。这两个查询都提供了按顺序排序的项目列表。

它似乎没有改变任何东西。在特定点停止列表是合理的,但我尝试了这段代码,结果没有改变。在某一点上是否应该有EntryList[i-1]?这可能意味着EntryList不包含CurrentItem我更新了我的代码,以便为EntryList循环检索所有条目,包括当前条目。但是,结果没有变化。您可能希望使用值而不是引用。我会将==运算符改为Equals,并覆盖项classIt中的Equals方法。它似乎没有改变任何东西。在特定点停止列表是合理的,但我尝试了这段代码,结果没有改变。在某一点上是否应该有EntryList[i-1]?这可能意味着EntryList不包含CurrentItem我更新了我的代码,以便为EntryList循环检索所有条目,包括当前条目。但是,结果没有变化。您可能希望使用值而不是引用。我将把==运算符改为Equals,并覆盖Item类中的Equals方法