如果我将数据查询作为CMSRepeater的属性来提供,则该转发器以预览模式显示所有项目(已发布或未发布),并且仅在实时站点上显示已发布的项目。
但是,如果我尝试将数据源传递给转发器,则无法使它执行相同的操作。
我缺少某些属性或方法吗?
工程
<cms:CMSRepeater ID="rep2" runat="server" EnableViewState="true"
Path="./%" OrderBy="NodeOrder ASC"
MaxRelativeLevel="1"
ClassNames="MyClassName"
SelectedColumns="Col1, col2, etc">
</cms:CMSRepeater>
不起作用
private DataSet LoadRepeaterItemsWithoutCache()
{
var columns = @"col1,col2";
var path ="./%";
TreeProvider tree = new TreeProvider();
return tree.SelectNodes("MyClassName")
.OnCurrentSite()
.Path(path)
.OrderBy("NodeOrder")
.NestingLevel(1)
//.Published(true/false)
//.CheckPermissions(true/false)
.CombineWithDefaultCulture(false)
.Columns(columns);
}
var tnds = LoadRepeaterItemsWithoutCache();
rep2.DataBindByDefault = false;
rep2.HideControlForZeroRows = true;
if (!DataHelper.DataSourceIsEmpty(tnds))
{
rep2.DataSource = tnds;
rep2.DataBind();
}
答案 0 :(得分:1)
看起来您需要稍微修改一下查询。您的函数期望将DataSet
作为返回值,而您正在返回ObjectQuery
。如果您想要或需要返回DataSet
,请在.Result
方法的末尾添加.SelectNodes()
。
.Columns(columns).Result;
另一个选择是返回一个ObjectQuery并将其简单地分配给转发器,然后让自然生命周期处理事物。
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);
}
答案 1 :(得分:0)
我认为您可以尝试这种方式:
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,则仅返回已发布节点,否则返回已发布和未发布节点。 我尚未对其进行测试,但希望它能起作用。