2009-12-01 8 views

Répondre

7
[PersistChildren(false)] 
[ParseChildren(true, "Text")] 
public partial class RequiredFieldMarker : UserControl, ITextControl 
{ 
    [Category("Settings")] 
    [PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty)] 
    public string Text 
    { 
     get 
     { 
      return lblName.Text; 
     } 
     set 
     { 
      lblName.Text = value; 
     } 
    } 
} 
2

ont une propriété sur votre contrôle utilisateur appelé Text et définir que comme

<uc:My id="my" Text="some text" runat="server">Text</uc:My> 

ou côté serveur

my.Text = "some text"; 
1

En supposant que l'UC génère une table, la méthode la plus simple que je peux penser est ceci:

Dans le ascx du UserControl faire quelque chose comme ceci:

<table> 
    <tr> 
    .... 
    <td><asp:Literal runat="server" ID="ltCellContent" /></td> 
    .... 
    </tr> 
</table> 

Dans le code de UserControl derrière:

public string CellContent 
{ 
    get { return ltCellContent.Text; } 
    set { ltCellContent.Text = value; } } 
} 

Et pour l'utiliser:

<uc:My runat="server" CellContent="Some content" /> 
+0

Oui, cela est le moyen le plus facile. Mais je veux comprendre comment mettre en œuvre la tâche correctement. Comme asp: Label fait. – abatishchev

+2

@abatishchev: Dans ce cas, vous devez examiner comment les contrôles personnalisés sont construits; Je recommande "Développer des contrôles et composants serveur Microsoft ASP.NET" par Nikhil/Datye, V. Kothari. – pbz

+0

Lorsque j'essaie cela, je reçois 'ltCellContent n'existe pas dans le contexte actuel'. –

1

Il suffit d'ajouter une ligne avant la classe ([ParseChildren (true, "TestInnerText")]) et ajoutez une propriété nommée "TestInnerText". Créer un contrôle de votre choix, j'ai créé LiteralControl juste pour afficher la vue html interne. "TestInnerText" - est juste un nom temporaire que j'ai donné, vous pouvez utiliser n'importe quel nom de propriété de votre choix.

Faites le changement suivant dans my.aspx.cs fichier,

[ParseChildren(true, "TestInnerText")] 
public partial class My : UserControl 
{ 
    public string TestInnerText 
    { 
     set 
     { 
      LiteralControl lc = new LiteralControl(); 
      lc.Text = value; 
      this.Controls.Add(lc); 
     } 
    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 
Questions connexes