2009-12-01 38 views

Respuesta

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

tienen una propiedad de su mando usuario llamado Text, y establece que al igual que

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

o del lado del servidor

my.Text = "some text"; 
1

Suponiendo que la UC genera una tabla, el método más fácil que se me ocurre es esto:

En ascx del UserControl hacer algo como esto:

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

En el código del control de usuario detrás:

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

Y utilizarlo:

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

Sí, esta es la manera más fácil. Pero quiero entender cómo implementar la tarea correctamente. Como asp: Label does. – abatishchev

+2

@abatishchev: en ese caso, debe analizar cómo se crean los controles personalizados; Recomiendo "Desarrollar Controles y Componentes de Microsoft ASP.NET Server" por Nikhil/Datye, V. Kothari. – pbz

+0

Cuando intento esto, obtengo 'ltCellContent no existe en el contexto actual'. –

1

Sólo añadir una línea antes de la clase ([ParseChildren (true, "TestInnerText")]), y agregue una propiedad llamada "TestInnerText". Crea cualquier control de tu elección, he creado LiteralControl solo para mostrar la vista html interna.

"TestInnerText" - es solo un nombre temporal que di, puede usar cualquier nombre de propiedad de su elección.

Haga lo siguiente cambio en el archivo de my.aspx.cs,

[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) 
    { 
    } 
} 
Cuestiones relacionadas