我看到的新ContentView模板化服务器控件的示例都在前端使用ContentModelSource服务器控件。如果我已经创建了一个使用FrameworkAPI的方法并在criteria对象中设置了各种奇怪的过滤器并返回List<ContentData>
,那该怎么办?有没有办法可以将内容数据列表传递到我的ContentView服务器控件中,并完全跳过页面上的任何类型的ContentModelSource控件?
答案 0 :(得分:1)
使用ContentView时必须使用ContentModelSource。
但是,您可以使用现有的Framework 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
});
这将为您的ContentModelSource填充所有内容ID。
或者,您可以使用常规.Net控件(如Repeater)来写出您的内容项结果。
答案 1 :(得分:0)
我已经做了很多深入研究这个问题,并且我发现了以下内容:
SelectMethod
属性设置数据。将其设置为页面上返回ContentData
或List<ContentData>
的公共方法的名称。Model.ContentList
属性。如果你试图在Page_Init期间设置它,你会得到一个.NET异常(Null Reference,我认为)。<强> 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);
}