0

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

4

2 回答 2

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
            });

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

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

于 2013-11-04T17:17:55.157 回答
0

我已经对这个问题进行了很多研究,并且发现了以下内容:

  • 确实需要 ContentModelSource 才能使用 ContentView 服务器控件。如果您尝试不使用它,您会得到一个丑陋的 .NET 异常。
  • 您不需要实际从该 ContentModelSource 获取数据
  • SelectMethod可以使用ContentView 控件上的属性来设置数据。将其设置为页面上返回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);
}
于 2013-11-05T02:05:26.337 回答