如何生成具有我想要的任何属性的 System.Web.UI.HtmlControls.HtmlTextArea?
How can I generate a System.Web.UI.HtmlControls.HtmlTextArea with whatever attributes I want?
我有一个非常独特的情况,我需要在页面上从后面的代码生成一个 <textarea>
:
Public Class Textarea
Inherits System.Web.UI.HtmlControls.HtmlTextArea
End Class
和控制:
<me:Textarea ... />
问题是,我的特殊情况要求我使用奇怪的属性。我基本上需要它来输出这样的东西:
<textarea :class="{}" :id="something">
所以我希望能够做到:
<me:Textarea :class="{}" etc. />
有没有一种简单的方法可以完全按照我的输入进行渲染?或者我应该使用另一个控件?在渲染阶段从头开始构建它?我得到关于标签格式不正确的错误,所以最终我只是希望它吐出 <textarea>
标签,其内容与输入的完全一样。在标签中包含 C# 因为无关紧要。将举任何例子。
尝试以下操作。还不错。
为您的服务器端控件创建一个 属性,您可以在其中填充您想要的任何文本。我称之为"ExtraStuff"。用私有变量支持它。然后覆盖 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="{}" :id="something""></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>
输出是一样的。
所有这些答案都很好,但我想与大家分享我想出的方法,使它尽可能简单。
我刚刚创建了一个控件:
Public Class Wrapper
Inherits Control
End Class
然后:
<me:Wrapper>
<textarea anything i want here... ></textarea>
</me:Wrapper>
它和我输入的完全一样。对于那些质疑为什么还要打扰的人,我在另一个使用控件构建器的解析器中,并且 <textarea>
是它的子控件之一,因此需要一个解决方法来仅使用常规 HTML.
我有一个非常独特的情况,我需要在页面上从后面的代码生成一个 <textarea>
:
Public Class Textarea
Inherits System.Web.UI.HtmlControls.HtmlTextArea
End Class
和控制:
<me:Textarea ... />
问题是,我的特殊情况要求我使用奇怪的属性。我基本上需要它来输出这样的东西:
<textarea :class="{}" :id="something">
所以我希望能够做到:
<me:Textarea :class="{}" etc. />
有没有一种简单的方法可以完全按照我的输入进行渲染?或者我应该使用另一个控件?在渲染阶段从头开始构建它?我得到关于标签格式不正确的错误,所以最终我只是希望它吐出 <textarea>
标签,其内容与输入的完全一样。在标签中包含 C# 因为无关紧要。将举任何例子。
尝试以下操作。还不错。
为您的服务器端控件创建一个 属性,您可以在其中填充您想要的任何文本。我称之为"ExtraStuff"。用私有变量支持它。然后覆盖 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="{}" :id="something""></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>
输出是一样的。
所有这些答案都很好,但我想与大家分享我想出的方法,使它尽可能简单。
我刚刚创建了一个控件:
Public Class Wrapper
Inherits Control
End Class
然后:
<me:Wrapper>
<textarea anything i want here... ></textarea>
</me:Wrapper>
它和我输入的完全一样。对于那些质疑为什么还要打扰的人,我在另一个使用控件构建器的解析器中,并且 <textarea>
是它的子控件之一,因此需要一个解决方法来仅使用常规 HTML.