Kentico 如何让TreeProvider.SelectNodes像CMSRepeater一样在预览模式下返回所有数据
如果我将数据查询作为CMSRepeater的属性提供,则中继器将在预览模式下显示所有项目(已发布或未发布),并且仅在实时站点上显示已发布的项目。Kentico 如何让TreeProvider.SelectNodes像CMSRepeater一样在预览模式下返回所有数据,kentico,Kentico,如果我将数据查询作为CMSRepeater的属性提供,则中继器将在预览模式下显示所有项目(已发布或未发布),并且仅在实时站点上显示已发布的项目。 但是,如果我试图将数据源传递给中继器,我无法让它执行相同的操作。 我是否缺少某些属性或方法 有效 <cms:CMSRepeater ID="rep2" runat="server" EnableViewState="true" Path="./%" OrderBy="NodeOrder ASC"
但是,如果我试图将数据源传递给中继器,我无法让它执行相同的操作。
我是否缺少某些属性或方法 有效
<cms:CMSRepeater ID="rep2" runat="server" EnableViewState="true"
Path="./%" OrderBy="NodeOrder ASC"
MaxRelativeLevel="1"
ClassNames="MyClassName"
SelectedColumns="Col1, col2, etc">
</cms:CMSRepeater>
看起来您需要稍微修改一下查询。您的函数需要一个
数据集
作为返回值,而您正在返回一个对象查询
。如果希望或需要返回数据集
,请将结果
添加到方法的末尾
.Columns(Columns).Result代码>
另一个选项是返回一个ObjectQuery,并简单地将其分配给repeater,让自然生命周期处理事情
public override void OnContentLoaded()
{
//rep2.DataBindByDefault = false;
rep2.HideControlForZeroRows = true;
TreeProvider tree = new TreeProvider();
rep2.DataSource = tree.SelectNodes("MyClassName")
.OnCurrentSite()
.Path(path)
.OrderBy("NodeOrder")
.NestingLevel(1)
//.Published(true/false)
//.CheckPermissions(true/false)
.CombineWithDefaultCulture(false)
.Columns(columns);
}
我想你可以这样做:
private DataSet LoadRepeaterItemsWithoutCache()
{
var columns = @"col1,col2";
var path ="./%";
TreeProvider tree = new TreeProvider();
var datasource = tree.SelectNodes("MyClassName")
.OnCurrentSite()
.Path(path)
.OrderBy("NodeOrder")
.NestingLevel(1)
//.Published(true/false)
//.CheckPermissions(true/false)
.CombineWithDefaultCulture(false)
.Columns(columns);
//If is in LiveSite mode, then return only published
if (PortalContext.ViewMode == ViewModeEnum.LiveSite)
datasource = datasource.Published();
return datasource;
}
在返回数据源之前,请检查站点是否处于LiveSite模式。如果为true,则仅返回已发布的节点,否则返回已发布和未发布的节点。
我还没有测试过它,但希望它能工作。您什么时候调用这些方法?您的属性应该在OnContentLoaded()
事件或OnInit()
事件中设置。@BrendenKehren我在OnContentLoaded()
方法中调用它们,在base.OnContentLoaded()
方法之后。只需添加到Brenden的答案中,ObjectQuery有两个参数,Published()和PublishedVersion(). Published()-此选项限制数据集。它告诉方法只返回已发布版本可用的项。因此,这一个将从返回的items PublishedVersion()中删除未发布的项-这一个告诉您要获取什么样的数据。在这种情况下,最新发布版本的数据。因此,在某些情况下,您可能需要同时使用这两种方式。@BrendenKehren遗憾的是,这仍然只提取已发布的项目,而不管查看模式如何。由于某些原因,在处理数据时,中继器以预览模式(需要)显示未发布的项目,但分配数据源不会。我想最坏的情况是我只能在livesite模式下使用数据集。
private DataSet LoadRepeaterItemsWithoutCache()
{
var columns = @"col1,col2";
var path ="./%";
TreeProvider tree = new TreeProvider();
var datasource = tree.SelectNodes("MyClassName")
.OnCurrentSite()
.Path(path)
.OrderBy("NodeOrder")
.NestingLevel(1)
//.Published(true/false)
//.CheckPermissions(true/false)
.CombineWithDefaultCulture(false)
.Columns(columns);
//If is in LiveSite mode, then return only published
if (PortalContext.ViewMode == ViewModeEnum.LiveSite)
datasource = datasource.Published();
return datasource;
}