2013-09-27 4 views
0

Я пытаюсь создать шаблоны для моего серверного элемента управления (шаблон подписи и шаблон содержимого).Создание шаблона управления сервером asp.net

<uc:MyControl ID="myConrol1" runat="server"> 
    <CaptionTemplate> 
     <%# Eval("MyCaption") %> 
    </CaptionTemplate> 
    <ContentTemplate> 
     <b><%# Eval("MyContent") %></b> 
    </ContentTemplate> 
</uc:MyControl> 

А затем дать шаблоны с источником данных

var ds = new List<CarouselItem> 
       { 
        new CarouselItem() 
         { 
          MyCaption = "Slide 1 caption", 
          MyContent = "Slide 1 content" 
         }, 
        new CarouselItem() 
         { 
          MyCaption = "Slide 2 caption", 
          MyContent = "Slide 2 content" 
         } 
       }; 

myConrol1.DataSource = ds; 
myConrol1.DataBind(); 

Однако то, что я пытался не работает для меня. Вот код, который я пытался достичь этой функциональности.

[Browsable(false), DefaultValue(null), Description("The content template."), TemplateContainer(typeof(MyItemContainer)), PersistenceMode(PersistenceMode.InnerProperty)] 
public virtual ITemplate ContentTemplate { get; set; } 

[Browsable(false), DefaultValue(null), Description("The caption template."), TemplateContainer(typeof(MyItemContainer)), PersistenceMode(PersistenceMode.InnerProperty)] 
public virtual ITemplate CaptionTemplate { get; set; } 

Затем я создал

public class MyItemContainer : WebControl, INamingContainer 
     { 
      private readonly MyItem item; 
      public MyItemContainer (MyItem ai) 
      { 
       item = ai; 
      } 

      public MyItem DataItem 
      { 
       get { return item; } 
      } 
     } 

А потом в методе связывания писал InstantiateIn к этому классу

foreach (object dataSourceObject in ds) 
      { 
       var item = new MyItem 
        { 
         Caption = new PlaceHolder(), 
         Content = new PlaceHolder(), 
         DataItem = dataSourceObject 
        }; 

       if (ContentTemplate != null) 
       { 
        MyAccordionItemContainer cc = new MyAccordionItemContainer(item); 
        ContentTemplate.InstantiateIn(cc); 
        item.Content.Controls.Add(cc); 
       } 

       if (CaptionTemplate != null) 
       { 
        MyAccordionItemContainer cc = new MyAccordionItemContainer(item); 
        CaptionTemplate.InstantiateIn(cc); 

        item.Caption.Controls.Add(cc); 
       } 

       item.DataBind(); 
      } 

Нет все в странице не пусто и не переплетены. Кажется, я не использую dataSourceObject в процессе создания экземпляра, но я не уверен, как его использовать. Есть ли здесь какие-нибудь идеи?

ответ

Смежные вопросы