Всички примери, които виждам за новата шаблонна сървърна контрола на 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
Рових се много по този проблем и открих следните неща:
- Вярно е, че 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