Search code examples
c#asp.netweb-user-controls

Accessing inner value of ASP.NET Web User Control


Surprised that i havent been able to find this myself, but anyway. Let's say i use my web user control like this:

<myprefix:mytag userid="4" runat="server">Some fancy text</myprefix:mytag>

How would i be able to access the text inside the tags from its codebehind ("Some fancy text")? Was expecting it to be exposed through this.Text, this.Value or something similar.

EDIT: I even get the following warning on the page where i try to user it: Content is not allowed between the opening and closing tags for element 'mytag'.

EDIT2:

public partial class mytag: UserControl
{
    public int ItemID { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {           
    }
}

Solution

  • I assume your custom control has a property called Text of type string. If you then declare this property to have the persistence mode "InnerDefaultProperty" you should get what you are looking for.

    E.g.

    /// <summary>
    /// Default Text property ("inner text" in HTML/Markup)
    /// </summary>
    [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
    public string PropertyTest
    {
        get
        {
            object o = this.ViewState["Text"];
            if (o != null)
            {
                return (string)o;
            }
            return string.Empty;
        }
        set
        {
            this.ViewState["Text"] = value;
        }
    }
    

    Edit: To avoid the "Literal Content Not Allowed" you have to help the parser by adding [ParseChildren(true, "PropertyTest")] to your class definition (see MSDN).

    And of course you need a writable property (i.e. it needs a setter which I omitted for shortness before).