Во всех примерах нового шаблонного серверного элемента управления ContentView во внешнем интерфейсе используется серверный элемент управления ContentModelSource. Что, если у меня уже есть метод, который использует FrameworkAPI и устанавливает всевозможные странные фильтры в объекте критериев и возвращает List<ContentData>
. Есть ли способ передать этот список данных содержимого в серверный элемент управления ContentView и полностью отказаться от наличия на странице какого-либо элемента управления ContentModelSource?
Есть ли способ вручную установить элементы содержимого в шаблонном серверном элементе управления ContentView?
Ответы (2)
Вы должны использовать ContentModelSource при использовании ContentView.
Однако вы можете использовать существующие команды Framework API для получения нужного контента, а затем передать идентификаторы контента элементу управления ContentModelSource в коде C#:
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 всеми вашими идентификаторами контента.
В качестве альтернативы вы можете использовать обычные элементы управления .Net, такие как Repeater, для записи результатов вашего элемента контента.
person
rf_wilson
schedule
04.11.2013
Я много копался в этом вопросе и обнаружил следующие вещи:
- Это правда, что для использования серверного элемента управления ContentView требуется ContentModelSource. Вы получите уродливое исключение .NET, если попытаетесь обойтись без него.
- Вам не требуется фактически получать данные из этого ContentModelSource
- Данные можно задать с помощью свойства
SelectMethod
элемента управления ContentView. Установите его на имя общедоступного метода на вашей странице, который возвращает либоContentData
, либоList<ContentData>
. - Кроме того, вы можете дождаться события Page_Load и установить свойство
Model.ContentList
. Вы получите исключение .NET (я думаю, нулевая ссылка), если попытаетесь установить его во время Page_Init.
ASPX:
<ektron:ContentModelSource runat="server" ID="cmsNull"></ektron:ContentModelSource>
<ektron:ContentView runat="server" ID="cvPrimary" ModelSourceID="cmsNull">
</ektron:ContentView>
С#:
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);
}
person
Brian Oliver
schedule
05.11.2013