Reputation: 13691
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)
{
}
}
Upvotes: 2
Views: 2298
Reputation: 3020
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.
[ParseChildren(true, "TestInnerText")]
public partial class mytag : UserControl
{
public string TestInnerText
{
set
{
LiteralControl lc=new LiteralControl();
lc.Text=value;
this.Controls.Add(lc);
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Upvotes: 0
Reputation: 2358
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).
Upvotes: 10