【发布时间】:2021-01-12 15:44:40
【问题描述】:
我想在我的转发器上将DataBindByDefault 设置为 false,否则它会调用 db,该 db 从页面的子节点返回所有数据,达到 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() 调用的,而 SetupControl() 是从 OnContentLoaded() 和 ReloadData() 调用的,但没有渲染任何内容。
如果我尝试在 PreRender 中调用 InitRepeater(),它会呈现但会忽略分页设置。
我正在使用 Kentico v12.0.65
【问题讨论】:
-
您是否尝试过在数据源中指定您真正需要限制检索数据大小的列?例如。只是转换方法(NodeAlias、NodeAliasPath、DocumentName、DocumentURLPath)所需的一些系统列以及您在转换中使用的列。然后,我还会尝试使用转发器的 LoadPagesIndividually 属性。如果为 true,则在分页的情况下单独加载每个页面。因此,这也可以限制数据大小,它们是按页面加载的,而不是一次全部加载。
-
@jujarp LoadPagesIndividually 成功了。你能回答这个问题,以便我可以标记为正确/接受吗?我总是只加载我需要的列。这是在 GetNews 方法中完成的。
标签: asp.net kentico kentico-12