2017-09-08 3 views
1

Ich habe eine sehr einzigartige Situation, wo ich brauche ein <textarea> auf der Seite, von der Code-behind zu generieren:Wie kann ich eine System.Web.UI.HtmlControls.HtmlTextArea mit den gewünschten Attributen generieren?

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

und die Steuerung:

<me:Textarea ... /> 

Das Problem ist, mein einzigartiger Fall verlangt von mir seltsame Attribute verwenden. Ich brauche es im Grunde die Ausgabe etwas wie folgt aus:

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

Also ich tun möchte in der Lage sein:

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

Gibt es eine unkomplizierte Möglichkeit, die Wiedergabe von genau zu erlauben, als ich geben? Oder sollte ich ein anderes Steuerelement verwenden? In der Render-Phase von Grund auf neu erstellen? Ich bekomme Fehler über das Etikett nicht gut gebildet, so dass ich letztlich nur wollen, dass es ausspucken die <textarea> Tag mit den Eingeweiden davon genau so getippt. Das Einfügen von C# in Tags ist nicht von Bedeutung. Will ein Beispiel nehmen.

Antwort

1

Alle diese Antworten sind ausgezeichnet, aber ich wollte mit allen teilen, was ich herausgefunden habe, wie man es so einfach wie möglich macht.

Ich habe gerade eine Kontrolle:

Public Class Wrapper 
    Inherits Control 
End Class 

Dann:

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

Welche es nur genau spuckt wie ich getippt. Für einige, die in Frage stellen, warum sogar stören, bin ich in einem anderen Parser, der einen Steuerelement-Generator verwendet und <textarea> ist eines der untergeordneten Steuerelemente davon, so benötigt eine Problemumgehung, nur normales HTML zu verwenden.

+0

Gute Arbeit. Das ist definitiv einfacher. – PerpetualStudent

0

Versuchen Sie Folgendes. Es ist nicht so schlimm.

Erstellen Sie für Ihr serverseitiges Steuerelement eine Eigenschaft, die Sie mit dem gewünschten Text füllen können. Ich habe es "ExtraStuff" genannt. Unterstütze es mit einer privaten Variable. Dann überschreiben die Render Ihre persönlichen Sachen als Teil des Tags zu schreiben:

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 

Dann in Ihrem Markup können Sie die zusätzliche Sachen hinzufügen, die Sie durch Zugabe zu der Eigenschaft, die Sie erstellt schreiben möchten. Sie werden dafür sorgen, müssen es aber richtig codiert ist:

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

Wenn dies macht, ich glaube, es wird aussehen, wie Sie es wollen:

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

Oder:

Ein anderer Ansatz, könnte robuster sein heißt, diese speziellen Attribute explizit zu deklarieren und dann in Ihrem Format auszugeben. Die serverseitige Steuer:

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 

Das Markup:

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

Der Ausgang ist das gleiche.

Verwandte Themen