【问题标题】:Kentico CmsRepeater: When to call databind when DataBindByDefault="false"Kentico CmsRepeater:当 DataBindByDefault="false" 时何时调用数据绑定
【发布时间】: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


【解决方案1】:

您应该使用中继器控件的 LoadPagesIndividually 属性。如果为 true,则在分页时单独加载每个页面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 2016-02-06
    • 2012-12-02
    • 1970-01-01
    • 2012-01-28
    相关资源
    最近更新 更多