有没有办法在 ContentView 模板化服务器控件上手动设置内容项

本文关键字:设置 服务器控件 ContentView 有没有 | 更新日期: 2023-09-27 18:37:28

我看到的新 ContentView 模板化服务器控件的示例都使用前端的 ContentModelSource 服务器控件。 如果我已经创建了一个使用 FrameworkAPI 并在条件对象中设置各种奇怪过滤器并返回List<ContentData>的方法怎么办. 有没有办法可以将内容数据列表传递到我的 ContentView 服务器控件中,并完全跳过页面上任何类型的 ContentModelSource 控件?

有没有办法在 ContentView 模板化服务器控件上手动设置内容项

使用

ContentView 时,必须使用 ContentModelSource。

但是,可以使用现有的框架 API 命令来获取所需的内容,然后将内容 ID 传递给 C# 代码中的 ContentModelSource 控件:

    ContentModelSource1.ContentFilters.Add(new Ektron.Cms.Framework.UI.Controls.ContentFilter()
            {
                Value = myContentIds, 
                Operator = Ektron.Cms.Common.CriteriaFilterOperator.In, 
                Field = Ektron.Cms.Common.ContentProperty.Id
            });

这将用您的所有内容 ID 填充您的 ContentModelSource。

或者,可以使用常规 .Net 控件(如中继器)写出内容项结果。

我对这个问题做了很多挖掘,我发现了以下几点:

  • 确实,需要使用 ContentModelSource 才能使用 ContentView 服务器控件。 如果您尝试不使用它,则会收到一个丑陋的 .NET 异常。
  • 您不需要从该内容模型源实际获取数据
  • 可以使用 ContentView 控件上的 SelectMethod 属性设置数据。 将其设置为页面上返回 ContentDataList<ContentData> 的公共方法的名称。
  • 或者,可以等到Page_Load事件并设置 Model.ContentList 属性。 如果您尝试在Page_Init期间设置它,则会出现 .NET 异常(我认为是空引用)。

.ASPX:

<ektron:ContentModelSource runat="server" ID="cmsNull"></ektron:ContentModelSource>
<ektron:ContentView runat="server" ID="cvPrimary" ModelSourceID="cmsNull">
</ektron:ContentView>

C#:

protected void Page_Load(object sender, EventArgs e)
{
    var cm = new ContentManager();
    var criteria = new ContentCriteria();
    criteria.AddFilter(ContentProperty.Type, CriteriaFilterOperator.EqualTo, EkEnumeration.CMSContentType.Content);
    cvPrimary.Model.ContentList = cm.GetList(criteria);
}