2010-05-07 63 views
1

我正在創建一個控件,它將顯示來自數據庫字段的文本。如果該字段不包含任何數據,我想提供它使用的默認內容,我想將其設置爲數據庫字段並呈現給頁面。不是非常複雜的事情,我只是無法獲取標籤的內容。如何從控件或ASP.NET中的自定義控件所包含的文本中獲取呈現的文本?

例子:

<custom:foo runat="server">this is the default content</custom:foo> 

我希望能夠抓住自定義之間的任何標記:FOO標籤和渲染到,我可以在數據庫中存儲領域的一個字符串。

我知道簡單的方法來做到這一點只是創建一個DefaultContent屬性並設置它,但我喜歡的靈活性,不僅放置在控件中的文本,並呈現它。

我使用Me.RenderChildren到HtmlTextWriter的嘗試和所有我從上面的例子中得到的是"<span></span>"

 Dim Builder As New StringBuilder() 
     Using Writer As New StringWriter(Builder) 
      Using HtmlWriter As New HtmlTextWriter(Writer) 
       Me.RenderChildren(HtmlWriter) 
      End Using 
     End Using 
     Return Builder.ToString() 

有沒有人有這樣的事情沒有成功?

回答

1

您可以添加ParseChildren屬性,然後重寫OnRender方法以相應地輸出HTML。

例如,是這樣的:

控制

namespace MyApp.Controls 
{ 
    [ParseChildren] 
    public class MyControl : Control 
    { 
      private string m_MyText; 

      public string MyText 
      { 
        get { return m_MyText; } 
        set { m_MyText = value; } 
      } 

      protected override void Render(HtmlTextWriter writer) 
      { 
        if (!string.IsNullOrEmpty(MyText)) 
        { 
          writer.Write("Value of MyText: " + MyText); 
          return; 
        } 

        base.Render(writer); 
      } 
    } 
} 

ASPX頁面

<!--Displays "Hello World!"--> 
<MyApp:MyControl runat="server">Hello World!</MyApp:MyControl> 

<!--Displays "Value of MyText: Hello" --> 
<MyApp:MyControl MyText="Hello" runat="server">Hello World!</MyApp:MyControl> 

<!--Displays Red Text--> 
<MyApp:MyControl runat="server"><asp:Label Text="Red Text" ForeColor="Red" runat="server" /></MyApp:MyControl> 
+0

爲什麼它的價值,我使用VB,並需要使用它作爲屬性:感謝您的幫助。 – 2010-05-07 19:18:02

0

您是否嘗試過在自定義設置ID:foo控件,以便您可以從後面的代碼訪問它?

+0

我沒有。我試圖保留自定義內部的所有邏輯:foo控制,以便使用它的任何頁面的代碼隱藏從不需要擔心。 – 2010-05-07 15:15:27

相關問題