Есть ли способ вручную установить элементы содержимого в шаблонном серверном элементе управления ContentView?

Во всех примерах нового шаблонного серверного элемента управления ContentView во внешнем интерфейсе используется серверный элемент управления ContentModelSource. Что, если у меня уже есть метод, который использует FrameworkAPI и устанавливает всевозможные странные фильтры в объекте критериев и возвращает List<ContentData>. Есть ли способ передать этот список данных содержимого в серверный элемент управления ContentView и полностью отказаться от наличия на странице какого-либо элемента управления ContentModelSource?


person Brian Oliver    schedule 30.10.2013    source источник


Ответы (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