3

我有asp:label一个嵌套自定义控件,它根本不呈现。我尝试WebControlAdapterLabel类型注册一个自定义,在调试时我注意到集合中显然没有控件Controls,它似乎完全忽略了任何嵌套元素。

这是标记

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

知道如何绕过这个问题吗?

4

1 回答 1

6

设置Text属性时,它会清除子控件。如果您Text="<%$ Resources:Resources, lbl13 %>"从 中删除Label,您的子控件应该呈现。


编辑
如果您将Text属性设置为静态字符串并仅添加文字内容,则标签将仅呈现文字内容:

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

如果将Text属性设置为静态字符串并添加子控件,则标签将呈现文本和子控件:

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

如果您Text使用表达式构建器设置属性,则标签将仅呈现文本:

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

要覆盖此行为,您需要一个自定义控件Label。例如:

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;
         }
      }
   }
}
于 2013-06-07T17:10:28.860 回答