如何使用我想要的任何属性生成System.Web.UI.HtmlControls.HtmlTextArea?

时间:2017-09-08 17:27:42

标签: c# asp.net vb.net htmlcontrols

我有一个非常独特的情况,我需要在页面上生成一个<textarea>,来自代码:

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

控制:

<me:Textarea ... />

问题是,我的独特案例要求我使用奇怪的属性。我基本上需要输出这样的东西:

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

所以我希望能够做到:

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

是否有一种简单的方法允许完全按照我键入的呈现方式?或者我应该使用另一个控件?在渲染阶段从头开始构建它?我得到关于标签格式不正确的错误,所以最终我只是希望它将<textarea>标签与它的内容完全一样地吐出来。在标签中包含C#因为无关紧要。举个例子。

2 个答案:

答案 0 :(得分:1)

所有这些答案都非常出色,但我想与大家分享一下我想办法让它变得尽可能简单。

我刚创建了一个控件:

Public Class Wrapper
  Inherits Control
End Class

然后:

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

这就像我打字一样吐出来。对于一些质疑为什么甚至麻烦的人,我在另一个使用控件构建器的解析器中,而<textarea>是其中一个子控件,因此需要一种解决方法来使用常规HTML。

答案 1 :(得分: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>

输出相同。