2017-09-08 9 views
1

私は背後にあるコードから、ページ上<textarea>を生成する必要が非常にユニークな状況があります。問題は私のユニークなケースが私を必要とし、あるどのような属性でもSystem.Web.UI.HtmlControls.HtmlTextAreaを生成するにはどうすればいいですか?

<me:Textarea ... /> 

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

と制御を奇妙な属性を使用する。だから私が行うことができるようにしたい

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

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

は、I型とまったくのレンダリングを可能にするために単純な方法はあります私は基本的に出力するため、このような何かを、それを必要としますか?または別のコントロールを使用する必要がありますか?レンダリングフェーズで最初からビルドしますか?タグがうまく形成されていないというエラーが表示されるので、究極的には<textarea>タグを正確に入力したもので吐き出したいだけです。それは問題ではないので、タグにC#を含めます。例を取る。

答えて

1

これらの回答はすべて優れていますが、できるだけシンプルにする方法を理解したことを皆と共有したかったのです。その後

Public Class Wrapper 
    Inherits Control 
End Class 

:ちょうど私が入力したとおりに、それを吐き出す

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

は、私はコントロールを作成しました。なぜか気になる人には、私はコントロールビルダーを使用する別のパーサーの中にいて、 <textarea>はその子コントロールの1つです。したがって、通常のHTMLだけを使用するには回避策が必要です。

+0

素敵な仕事。それは間違いなく簡単です。 – PerpetualStudent

0

以下を試してください。あまりにも悪くないです。

サーバー側のコントロールでは、任意のテキストを入力できるプロパティを作成します。私はそれを「ExtraStuff」と呼んだ。 Private変数でサポートします。そして、タグの一部として、あなたの余分なものを書くためにレンダリング上書き:

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 

次に、あなたのマークアップでは、あなたが作成したプロパティに追加して書きたい余分なものを追加することができます。

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

または::

かもしれない別のアプローチを、これはレンダリングするとき

<me:Textarea runat="server" ExtraStuff=":class=&quot;{}&quot; :id=&quot;something&quot;"></me: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> 

出力は同じです。

関連する問題