【问题标题】:Literal content is not allowed within a UserControlUserControl 中不允许有文字内容
【发布时间】:2015-05-27 15:22:04
【问题描述】:

如何让我的控件在其标签中包含文本?

<uc:My runat="server">Text</uc:My>

我的控件包含一个复杂的表格,我想将文本放入其中一个单元格。该怎么做?

【问题讨论】:

    标签: c# .net asp.net user-controls


    【解决方案1】:
    [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】:

      在您的用户控件上有一个名为Text 的属性,并将其设置为类似

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

      或服务器端

      my.Text = "some text"; 
      

      【讨论】:

        【解决方案3】:

        假设UC生成一个表,我能想到的最简单的方法是这样的:

        在 UserControl 的 ascx 中执行如下操作:

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

        在UserControl的代码后面:

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

        并使用它:

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

        【讨论】:

        • 是的,这是最简单的方法。但我想了解如何正确执行任务。就像 asp:Label 一样。
        • @abatishchev:在这种情况下,您需要研究自定义控件的构建方式;我推荐 Nikhil/Datee, V. Kothari 撰写的“开发 Microsoft ASP.NET 服务器控件和组件”。
        • 当我尝试这个时,我得到'ltCellContent 在当前上下文中不存在'。
        【解决方案4】:

        只需在类前添加一行 ([ParseChildren(true, "TestInnerText")]),并添加一个名为“TestInnerText”的属性。创建您选择的任何控件,我创建 LiteralControl 只是为了显示内部 html 视图。

        “TestInnerText” - 只是我给的一个临时名称,您可以使用您选择的任何属性名称。

        在 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)
            {
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-12
          • 2011-07-05
          相关资源
          最近更新 更多