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