0

私が見ている新しい ContentView テンプレート サーバー コントロールの例はすべて、フロント エンドで ContentModelSource サーバー コントロールを使用しています。FrameworkAPI を使用し、あらゆる種類の奇妙なフィルターを基準オブジェクトに設定してList<ContentData>. そのコンテンツ データのリストを ContentView サーバー コントロールに渡して、ページ上に任意の種類の ContentModelSource コントロールを完全にスキップする方法はありますか?

4

2 に答える 2

1

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

これにより、ContentModelSource にすべてのコンテンツ ID が入力されます。

または、Repeater などの通常の .Net コントロールを使用して、コンテンツ アイテムの結果を書き出すこともできます。

于 2013-11-04T17:17:55.157 に答える
0

私はこの問題について多くのことを掘り下げましたが、次のことを発見しました。

  • ContentView サーバー コントロールを使用するには ContentModelSource が必要であることは事実です。それなしで行こうとすると、醜い.NET例外が発生します。
  • その ContentModelSource から実際にデータを取得する必要はありません
  • データはSelectMethod、ContentView コントロールのプロパティを使用して設定できます。ContentDataまたはを返す、ページ上のパブリック メソッドの名前に設定しますList<ContentData>
  • または、Page_Load イベントまで待機して、Model.ContentListプロパティを設定することもできます。Page_Init 中に設定しようとすると、.NET 例外 (Null 参照だと思います) が発生します。

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 に答える