2

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

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

我如何能够从其代码隐藏(“一些花哨的文本”)访问标签内的文本?期待它通过 this.Text、this.Value 或类似的东西暴露出来。

编辑:我什至在尝试使用它的页面上收到以下警告: 元素'mytag'的开始和结束标签之间不允许有内容。

编辑2:

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

2 回答 2

10

我假设您的自定义控件具有称为Text字符串类型的属性。如果您随后将此属性声明为具有持久性模式“InnerDefaultProperty”,您应该得到您正在寻找的东西。

例如

/// <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)。

当然你需要一个可写的属性(即它需要一个我之前省略的设置器)。

于 2010-03-31T08:55:59.747 回答
0

只需在类前添加一行 ([ParseChildren(true, "TestInnerText")]),并添加一个名为“TestInnerText”的属性。创建您选择的任何控件,我创建 LiteralControl 只是为了显示内部 html 视图。

“TestInnerText” - 只是我给的一个临时名称,您可以使用您选择的任何属性名称。

[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)
    {
    }
}
于 2015-05-27T07:16:49.287 回答