Asp.net mvc Sitecore 8 MVC Glass查询数据源

Asp.net mvc Sitecore 8 MVC Glass查询数据源,asp.net-mvc,sitecore,sitecore8,glass-mapper,sitecore-mvc,Asp.net Mvc,Sitecore,Sitecore8,Glass Mapper,Sitecore Mvc,在使用glass时,Sitecore 8 MVC似乎不支持查询数据源(例如:query:…)。我想创建一个相对路径,以便分支模板在创建时指向正确的数据源。有没有一种方法可以通过Sitecore的查询生成器实现这一点?我看到了自定义查询选项,其中可以指定路径,但似乎无法执行任何操作。我想我可能会在模型被玻璃绑定之前添加一个管道处理器,将以查询:开头的数据源更改为解析路径,并沿着管道参数传递该路径。您可以将数据源查询添加到子布局或呈现数据源布局字段。您需要将新的处理器添加到getRenderingD

在使用glass时,Sitecore 8 MVC似乎不支持查询数据源(例如:query:…)。我想创建一个相对路径,以便分支模板在创建时指向正确的数据源。有没有一种方法可以通过Sitecore的查询生成器实现这一点?我看到了自定义查询选项,其中可以指定路径,但似乎无法执行任何操作。我想我可能会在模型被玻璃绑定之前添加一个管道处理器,将以
查询:
开头的数据源更改为解析路径,并沿着管道参数传递该路径。

您可以将数据源查询添加到
子布局
呈现
数据源布局
字段。您需要将新的
处理器
添加到
getRenderingDatasource
管道
。我自己在
分支模板上使用了它来创建到正确数据源的相对路径

您的
查询:.
需要在子布局/渲染的
数据源位置
中定义,并使用
祖先或自身
创建相对路径并遍历树以查找包含数据源的父项

query:.ancestor-or-self:: *[@@templatename = 'home']/*[@@templatename = 'storage']/*[@@templatename = 'articles']
处理器将需要使用
GetRenderingDatasourceArgs
。这些辩论将为你提供几乎所有你需要的东西。基本上,您需要获得在
数据源位置中编写的
查询:。

args.RenderingItem["Datasource Location"];
将查询的开头替换为上下文项路径(使其相对),然后调用以获取项

private IEnumerable<Item> GetDatasourceLocationsFromQuery(string query)
{
    string queryPath = query.Replace("query:.", args.ContextItemPath);
    return args.ContextDatabase.SelectItem(queryPath);
}
private IEnumerable GetDatasourceLocationsFromQuery(字符串查询)
{
字符串queryPath=query.Replace(“query:。”,args.ContextItemPath);
返回args.ContextDatabase.SelectItem(queryPath);
}

然后,这将返回作为数据源父项的匹配项。

我不确定是否完全理解。Sitecore 8 MVC支持数据源查询,这与Glass无关,Glass本身就是。只要您的查询被解析为正确的项,那么该项就应该传递给Glass。你能提供你正在使用的相同的代码/分支结构吗?也许我只是用错了。您知道如何为视图渲染的数据源提供一个查询,以获取一个项目,该项目是当前项目的子项,名称为Test Content吗?好的,这对我来说很有意义。我想我可以做一个检查,看看是否从
query:
开始。如果确实如此,我将删除
查询:
,并将其作为Sitecore查询运行,并返回从中选择的第一项。根据经验,它确实需要查询:。而不是询问:
query:.ancestor-or-self:: *[@@templatename = 'home']/*[@@templatename = 'storage']/*[@@templatename = 'articles']