visual tutorial studio pages net mvc framework ejemplos asp asp.net .net webforms web-controls

asp.net - tutorial - asp: etiqueta no representa niños



web forms c# ejemplos (1)

Tengo una asp:label con un control personalizado anidado y simplemente no se procesa. Traté de registrar un WebControlAdapter personalizado para el tipo de Label y mientras estaba depurando noté que aparentemente no hay control en la colección de Controls , parece estar ignorando por completo cualquier elemento anidado.

Aquí está el margen de ganancia

<asp:Label ID="lbl13" runat="server" AssociatedControlID="txt13" Text="<%$ Resources:Resources, lbl13 %>"> <asp:ValidationMessage ID="vm13" runat="server" MessageFor="txt13" CssClass="field-validation-error"></asp:ValidationMessage> </asp:Label>

¿Alguna idea de cómo evitar este problema?


Cuando establece la propiedad Text , borra los controles secundarios. Si elimina el Text="<%$ Resources:Resources, lbl13 %>" de la Label , sus controles secundarios deberían mostrarse.

EDITAR
Si establece la propiedad Text en una cadena estática y agrega solo contenido literal, la etiqueta solo mostrará el contenido literal:

<asp:Label runat="server" Text="Hello"> World</asp:Label> Output: World

Si establece la propiedad Text en una cadena estática y agrega controles secundarios, la etiqueta mostrará el texto y los controles secundarios:

<asp:Label runat="server" Text="Hello"> <asp:Label runat="server" Text="World" /> </asp:Label> Output: HelloWorld

Si configura la propiedad Text con un generador de expresiones, la etiqueta solo mostrará el texto:

<asp:Label runat="server" Text="<%$ Resources:Resources,Hello %>"> <asp:Label runat="server" Text="World" /> </asp:Label> Output: Localised version of "Hello"

Para anular este comportamiento, necesitará un control de Label personalizado. Por ejemplo:

public class MyLabel : Label { public override string Text { get { return base.Text; } set { if (HasControls()) { Controls.AddAt(0, new LiteralControl(value)); } else { base.Text = value; } } } }