2017-09-08 39 views
1

我有一個非常獨特的情況,我需要生成頁面上的<textarea>,從後面的代碼:如何使用我想要的任何屬性生成System.Web.UI.HtmlControls.HtmlTextArea?

Public Class Textarea 
    Inherits System.Web.UI.HtmlControls.HtmlTextArea 
End Class 

而且控制:

<me:Textarea ... /> 

的問題是,我的獨特情況需要我使用奇怪的屬性。我基本上是需要輸出是這樣的:

<textarea :class="{}" :id="something"> 

所以我希望能夠做到:

<me:Textarea :class="{}" etc. /> 

有沒有一種簡單的方法讓確切地如I型渲染?或者我應該使用另一種控制?在渲染階段從頭開始構建它?我收到關於標籤不完整的錯誤,所以最終我只是希望它將標籤的內容完全按照輸入的內容吐出。在標籤中包含C#因爲無所謂。將採取任何例子。

回答

1

所有這些答案都非常好,但我想與大家分享我想要如何做到儘可能簡單。

我剛剛創建了一個控制:

Public Class Wrapper 
    Inherits Control 
End Class 

然後:

<me:Wrapper> 
    <textarea anything i want here... ></textarea> 
</me:Wrapper> 

剛剛吐出它完全按照我打字。對於一些爲什麼甚至打擾的問題,我在另一個使用控件生成器的解析器中,而<textarea>是它的一個子控件,所以需要一個解決方法來使用常規的HTML。

+0

不錯的工作。這絕對比較簡單。 – PerpetualStudent

0

請嘗試以下操作。這不是太糟糕。

對於您的服務器端控件,創建一個屬性,您可以使用任何文本填充。我稱之爲「ExtraStuff」。用一個私有變量來支持它。然後重寫渲染到寫出你額外的東西作爲標記的一部分:

Public Class Textarea 
    Inherits System.Web.UI.HtmlControls.HtmlTextArea 

    Private m_sExtraStuff As String = "" 

    Public Property ExtraStuff As String 
     Get 
      Return m_sExtraStuff 
     End Get 
     Set(value As String) 
      m_sExtraStuff = value 
     End Set 
    End Property 

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
     writer.Write("<textarea ") 
     writer.Write(m_sExtraStuff) 
     writer.Write("></textarea>") 
    End Sub 

End Class 

然後,在你的標記,你可以添加你想要將它添加到您所創建的屬性寫出來多餘的東西。你必須確保它的編碼正確,但:

<me:Textarea runat="server" ExtraStuff=":class=&quot;{}&quot; :id=&quot;something&quot;"></me:Textarea> 

當此呈現,我認爲它看起來像你想它:

<textarea :class="{}" :id="something"></textarea> 

或者:

另一種方法可能更強大的是明確聲明這些特殊屬性,然後以你的格式寫出來。服務器側控制:

Public Class Textarea 
    Inherits System.Web.UI.HtmlControls.HtmlTextArea 

    Private m_sSpecialID As String = "" 
    Private m_sSpecialClass As String = "" 

    Public Property SpecialID As String 
     Get 
      Return m_sSpecialID 
     End Get 
     Set(value As String) 
      m_sSpecialID = value 
     End Set 
    End Property 

    Public Property SpecialClass As String 
     Get 
      Return m_sSpecialClass 
     End Get 
     Set(value As String) 
      m_sSpecialClass = value 
     End Set 
    End Property 

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) 
     writer.Write("<textarea :class=""") 
     writer.Write(m_sSpecialClass) 
     writer.Write(""" :id=""") 
     writer.Write(m_sSpecialID) 
     writer.Write("""></textarea>") 
    End Sub 

End Class 

的標記:

<me:Textarea runat="server" SpecialClass="{}" SpecialID="something"></me:Textarea> 

的輸出是相同的。

相關問題