有没有办法在 ContentView 模板化服务器控件上手动设置内容项
本文关键字:设置 服务器控件 ContentView 有没有 | 更新日期: 2023-09-27 18:37:28
我看到的新 ContentView 模板化服务器控件的示例都使用前端的 ContentModelSource 服务器控件。 如果我已经创建了一个使用 FrameworkAPI 并在条件对象中设置各种奇怪过滤器并返回List<ContentData>
的方法怎么办. 有没有办法可以将内容数据列表传递到我的 ContentView 服务器控件中,并完全跳过页面上任何类型的 ContentModelSource 控件?
使用
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
属性设置数据。 将其设置为页面上返回ContentData
或List<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);
}