访问ASP.NET Web用户控件的内部值

时间:2010-03-31 08:16:34

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

感到惊讶的是我自己找不到这个,但无论如何。假设我使用我的网络用户控件:

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

2 个答案:

答案 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)
    {
    }
}