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