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;
}
}
}
}