2010-03-31 51 views
2

感到驚訝的是,我還沒有能夠自己找到這個,但無論如何。比方說,我用我的web用戶控件是這樣的:訪問ASP.NET Web用戶控件的內部值

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

我將如何能夠從它的代碼隱藏(「一些優秀的文本」)訪問標籤內的文本?期待它通過這個.Text,this.Value或類似的東西暴露出來。

編輯: 我甚至收到以下警告頁面上哪裏我嘗試用戶它: 內容是不打開和關閉標籤之間允許元素「mytag」。

EDIT2:

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

回答

9

我假設你的自定義控件有一個名爲string類型的Text財產。如果你聲明這個屬性擁有持久化模式「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,我之前爲了簡短而省略)。

+0

使用這個即時通訊獲取以下**解析器**錯誤:文字內容('一些花哨文本')不允許在'ASP.mytag_ascx'內。 – Fabian 2010-03-31 08:59:57

+0

哎呀,錯過了什麼。見編輯... – scherand 2010-03-31 09:37:32

+0

[ParseChildren(true,「PropertyTest」)]做了這個伎倆,謝謝! – Fabian 2010-03-31 09:41:16

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