Има ли начин ръчно да зададете елементите на съдържанието в шаблонна сървърна контрола на 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

Рових се много по този проблем и открих следните неща:

  • Вярно е, че ContentModelSource е необходим за използване на сървърния контрол ContentView. Получавате грозно .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>

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);
}
person Brian Oliver    schedule 05.11.2013