1

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

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

和控制:

<me:Textarea ... />

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

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

所以我希望能够做到:

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

是否有一种简单的方法可以完全按照我的输入进行渲染?或者我应该使用另一个控件?在渲染阶段从头开始构建它?我收到关于标签格式不正确的错误,所以最终我只希望它吐出<textarea>标签,其内容与输入的内容完全相同。在标签中包含 C# 因为没关系。会举任何例子。

4

2 回答 2

1

所有这些答案都很好,但我想与大家分享我想出的如何让它尽可能简单的方法。

我刚刚创建了一个控件:

Public Class Wrapper
  Inherits Control
End Class

然后:

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

就像我输入的那样吐出来。对于一些质疑为什么还要麻烦的人,我在另一个使用控件构建器并且<textarea>是它的子控件之一的解析器中,因此需要一种解决方法来仅使用常规 HTML。

于 2017-09-09T00:04:02.560 回答
0

试试下面的。这还不错。

对于您的服务器端控件,创建一个属性,您可以用您想要的任何文本填充该属性。我称它为“额外的东西”。用私有变量支持它。然后覆盖 Render 以将您的额外内容作为标签的一部分写出:

    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>

输出是一样的。

于 2017-09-08T22:04:36.717 回答