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

时间:2013-10-30 21:39:18

标签: c# ektron

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

2 个答案:

答案 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)

我已经做了很多深入研究这个问题,并且我发现了以下内容:

  • 确实需要ContentModelSource才能使用ContentView服务器控件。如果你试图不使用它,你会得到一个丑陋的.NET异常。
  • 您无需实际从ContentModelSource获取数据
  • 可以使用ContentView控件上的SelectMethod属性设置数据。将其设置为页面上返回ContentDataList<ContentData>的公共方法的名称。
  • 或者,您可以等到Page_Load事件并设置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);
}