感到惊讶的是我自己找不到这个,但无论如何。假设我使用我的网络用户控件:
<myprefix:mytag userid="4" runat="server">Some fancy text</myprefix:mytag>
我如何能够从其代码隐藏(“一些花哨的文本”)中访问标签内的文本?期待它通过this.Text,this.Value或类似的东西暴露出来。
编辑: 我甚至在尝试使用它的页面上收到以下警告: 元素'mytag'的开始和结束标记之间不允许使用内容。
EDIT2:
public partial class mytag: UserControl
{
public int ItemID { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
}
}
答案 0 :(得分:9)
我假设你的自定义控件有一个名为Text
的属性为string的属性。如果你然后声明这个属性具有持久性模式“InnerDefaultProperty”,那么你应该得到你想要的东西。
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;
}
}
修改强>
要避免“不允许使用文字内容”,您必须通过将[ParseChildren(true, "PropertyTest")]
添加到类定义来帮助解析器(请参阅MSDN)。
当然你需要一个可写属性(即它需要一个我之前省略的setter。)
答案 1 :(得分:0)
只需在类之前添加一行([ParseChildren(true,&#34; TestInnerText&#34;)]),并添加一个名为&#34; TestInnerText&#34;的属性。创建您选择的任何控件,我创建了LiteralControl只是为了显示内部html视图。
&#34; TestInnerText&#34; - 只是我给出的临时名称,您可以使用您选择的任何属性名称。
[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)
{
}
}