Kentico CmsRepeater:当 DataBindByDefault="false" 时调用数据绑定
Kentico CmsRepeater: When to call databind when DataBindByDefault="false"
我想在中继器上将 DataBindByDefault
设置为 false,否则它会调用数据库,returns 来自页面子节点的所有数据达到 12MB。
我现在已经破解了它,并将路径值设置为“。” (仅限同一页面)在前面的代码中,但它仍然是一个额外的数据库调用。
所以我的计划是将 DataBindByDefault
设置为 false,将自定义查询中的数据分配给转发器,然后按如下方式调用 databind()
:
<cms:CMSRepeater ID="repItems" runat="server" Path="."/>
private void InitRepeater()
{
var data = (DataSet)NewsProvider.GetNews(ClassNames, Path, MaxRelativeLevel, OrderBy, WhereStatement, SelectTopN, -1, -1);
if (!DataHelper.DataSourceIsEmpty(data))
{
repItems.DataSource = data;
repItems.ControlContext = ControlContext;
repItems.EnablePaging = true;
repItems.PageSize = PageSize;
repItems.PagerControl.CurrentPage = 1;
repItems.PagerControl.PageSize = PageSize;
repItems.PagerControl.Visible = false;
repItems.HideControlForZeroRows = true;
repItems.TransformationName = Transformation;
repItems.DataBind();
}
}
InitRepeater()
从 SetupControl()
调用,从 OnContentLoaded()
和 ReloadData()
调用但没有渲染。
如果我尝试在 PreRender 中调用 InitRepeater()
,它会呈现但会忽略分页设置。
我正在使用 Kentico v12.0.65
您应该使用转发器控件的 LoadPagesIndividually 属性。如果为 true,则在分页的情况下单独加载每个页面。
我想在中继器上将 DataBindByDefault
设置为 false,否则它会调用数据库,returns 来自页面子节点的所有数据达到 12MB。
我现在已经破解了它,并将路径值设置为“。” (仅限同一页面)在前面的代码中,但它仍然是一个额外的数据库调用。
所以我的计划是将 DataBindByDefault
设置为 false,将自定义查询中的数据分配给转发器,然后按如下方式调用 databind()
:
<cms:CMSRepeater ID="repItems" runat="server" Path="."/>
private void InitRepeater()
{
var data = (DataSet)NewsProvider.GetNews(ClassNames, Path, MaxRelativeLevel, OrderBy, WhereStatement, SelectTopN, -1, -1);
if (!DataHelper.DataSourceIsEmpty(data))
{
repItems.DataSource = data;
repItems.ControlContext = ControlContext;
repItems.EnablePaging = true;
repItems.PageSize = PageSize;
repItems.PagerControl.CurrentPage = 1;
repItems.PagerControl.PageSize = PageSize;
repItems.PagerControl.Visible = false;
repItems.HideControlForZeroRows = true;
repItems.TransformationName = Transformation;
repItems.DataBind();
}
}
InitRepeater()
从 SetupControl()
调用,从 OnContentLoaded()
和 ReloadData()
调用但没有渲染。
如果我尝试在 PreRender 中调用 InitRepeater()
,它会呈现但会忽略分页设置。
我正在使用 Kentico v12.0.65
您应该使用转发器控件的 LoadPagesIndividually 属性。如果为 true,则在分页的情况下单独加载每个页面。