我们对 Sitefinity 中的每个控件都执行此操作,但使用您自己的自定义控件会有点复杂(我假设您使用的是 Sitefinity 3.7)。步骤如下:
-实现一个模板容器控件,继承自 GenericContainer:
protected class ItemListContainer : GenericContainer
{
public virtual Repeater RepeaterControl
{
get { return base.GetControl<Repeater>("repeater", true); }
}
}
-您需要从资源中获取模板(使用 ControlUtils.GetTemplate 方法 - Sitefinity 为您执行此操作):
public virtual ITemplate ItemListTemplate
{
get
{
if (itemListTemplate == null)
itemListTemplate = ControlUtils.GetTemplate(<virtual path to template>, <resource file name>,
<type to determine assembly for template>);
return itemListTemplate;
}
set
{
itemListTemplate = value;
}
}
-您需要调用模板的 InstantiateIn 方法,并将其传递给容器控件
listContainer = new ItemListContainer();
ItemListTemplate.InstantiateIn(listContainer);
-通过容器访问所有控件
listContainer.RepeaterControl.DataBind();
在 Sitefinity 4.0 中,我们为所有控件包含了一个基类,它将为您提供开箱即用的功能。但在 3.7 中,您必须手动完成所有这些操作。
ControlUtils 类位于 Telerik.Framework.Web 命名空间中。上面的代码是如何在 ContentView 控件中完成这一切的,您可能应该根据您的情况稍作修改。
干杯,
Slavo
Sitefinity 团队 @ Telerik