Literal content is not allowed within a UserContro

2020-04-03 16:55发布

问题:

How to allow my control contains a text inside it's tags?

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

My control contains a complex table and I want to put Text into one of cells. How to do that?

回答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:

Have a property on your user control called Text, and set that like

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

or server side

my.Text = "some text"; 


回答3:

Assuming the UC generates a table, the easiest method I can think of is this:

In the UserControl's ascx do something like this:

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

In the UserControl's code behind:

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

And to use it:

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


回答4:

Just add one line before the class ([ParseChildren(true, "TestInnerText")]), and add a property named "TestInnerText". Create any control of your choice, I have created LiteralControl just to display inner html view.

"TestInnerText" - is just a temporary name I gave, you can use any property name of your choice.

Do the following change in my.aspx.cs file,

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