2011-07-26 1 views
1

J'ai un contrôle utilisateur Web avec le balisage suivantErreur dans le contrôle utilisateur Web avec ITemplate en mode Design

<table> 
    <tr> 
     <td> 
      <h1> 
       <%= this.Title %></h1> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <h2> 
       Footer</h2> 
     </td> 
    </tr> 
</table> 

le code derrière:

[ParseChildren(true, "Content"), PersistChildren(true)] 
public partial class WebUserControl1 : System.Web.UI.UserControl 
{ 
    public string Title { get; set; } 

    [PersistenceMode(PersistenceMode.InnerDefaultProperty), 
    TemplateContainer(typeof(ContentContainer)), 
    TemplateInstance(TemplateInstance.Single), 
    DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]   
    public ITemplate Content { get; set; } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     PlaceHolder1.Controls.Clear(); 
     var container = new ContentContainer(); 

     this.Content.InstantiateIn(container); 
     PlaceHolder1.Controls.Add(container); 
    } 
} 

public class ContentContainer : Control, INamingContainer 
{ 
} 

et en utilisant dans une page comme celle-ci

<%@ Register Src="WebUserControl1.ascx" TagName="WebUserControl1" TagPrefix="uc1" %> 
<uc1:WebUserControl1 ID="WebUserControl11" runat="server" Title="The Title"> 
    <Content> 
     <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label></Content> 
</uc1:WebUserControl1> 

Lorsque j'exécute la page, elle s'exécute bien. lorsque je vois la page en mode Conception j'ai l'erreur suivante:

Type 'System.Web.UI.UserControl' does not have a public property named 'Content'.

Comment puis-je résoudre ce problème?

EDIT: Je modifié le code

Répondre

3

De MSDN How to: Create Templated ASP.NET User Controls

Note: Templated ASP.NET user controls are not supported in the Visual Studio designer. However, you can compile and run this example in Visual Studio. To do so, when you create ASP.NET pages to test this code, replace all the designer-generated code in the pages with the code and markup in the example listings.

0

Vous devez ajouter les enfants parse bien à votre classe de contrôle utilisateur comme ci-dessous.

ParseChildren(true, "Content") 
public partial class WebUserControl1 : System.Web.UI.UserControl 

Cela signifie que le contrôle ContentProvider, ses contrôles internes seront analysés et ajoutés dans sa propriété Enfants. Au moment de la conception, ils resteront comme contrôles enfants. Cochez cette case link pour plus de détails.

+0

'ParseChildren (true, le "contenu")' n'a pas marché –

+0

que diriez-vous [ParseChildren (true, "Contenu"), PersistChildren (true)]. Vous devrez peut-être fermer la page et la rouvrir pour résoudre tous les problèmes de mise en cache. Avez-vous regardé à travers l'article que j'ai lié à. Il aborde ce genre de problèmes de concepteur. –

+0

également, essayez de définir le mode de persistance du contenu à PersistenceMode (PersistenceMode.InnerDefaultProperty) –

Questions connexes