簡體   English   中英

訪問ASP.NET Web用戶控件的內部值

[英]Accessing inner value of ASP.NET Web User Control

很驚訝,我自己也找不到這個,但無論如何。 假設我使用我的網絡用戶控件,如下所示:

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

我假設您的自定義控件有一個名為Text of string的屬性。 如果您然后聲明此屬性具有持久性模式“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 )。

當然,你需要一個可寫的屬性(即它需要一個我之前為了簡短而省略的setter)。

只需在類之前添加一行([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)
    {
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM