2011-01-05 16 views

Antwort

0

Ich fand diese Methode beim Betrachten der API.

Dies funktionierte gut für mich und schien der am besten geeignete Ort, um es zu sagen. Einfach überschreiben.

public override void RenderBeginTag(HtmlTextWriter writer) 
{ 
    writer.AddAttribute(HtmlTextWriterAttribute.Class, "[^_^]"); 
    base.RenderBeginTag(writer); 
} 
+0

Diese Methode wird innerhalb des Benutzerdefinierten Steuerelements überschrieben. Daher wird, wenn RenderBeginTag() aufgerufen wird, ich Attribute einfügen, wie ich es für richtig halte. Was ist unklar an der Frage oder meiner Antwort? –

+0

Entschuldigung, ich habe meinen Kommentar gelöscht, als ich gesehen habe, dass du der Fragesteller warst. Siehe den Kommentar zu meiner Antwort ... – hunter

0

Wenn Sie Ihre HtmlTextWriter haben, können Sie zuerst einige Attribute hinzufügen, bevor Sie ein Tag rendern. Zum Beispiel:

public void writeDivWithStyle(HtmlTextWriter writer, string style) 
{ 
    writer.AddAttribute(HtmlTextWriterAttribute.Style, style); 
    writer.RenderBeginTag(HtmlTextWriterTag.Div); 

    // more code here 

    writer.RenderEndTag(); // close the DIV 
} 
+0

"Aber wie kann ich dem übergeordneten Element Attribute wie einen Stil oder eine ID hinzufügen?" bin ich der Einzige, der diesen Teil liest? – hunter

0

sollten Sie in der Lage sein zu verwenden:

CONTROL.Attribute.Add("..") // nicht die korrekte Syntax

siehe this link

EDIT: Verwendungsbeispiel

Control control = this.FindControl("body"); 
HtmlControl divControl = new HtmlGenericControl("div"); 
divControl.Attributes.Add("id","myid"); 
divControl.Attributes.Add("class","myclass"); 
control.Controls.Add(divControl); 
+0

Was ist der Grund für einen Downvote? – VoodooChild

+0

Willst du mich denken lassen, dass das Übergeben eines einzelnen String-Arguments an die Add-Methode, die übrigens 2 String-Argumente erfordert, wie ein UNIX-Pfad auf das ** Eltern-Steuerelement ** verweist? –

+0

War ich nicht, aber angesichts dessen, was der Fragesteller kommentiert, ist dies absolut gültig, abgesehen von den fehlenden Params. Ich lese die Frage anders – hunter

4

Sie wäre in der Lage, so etwas innerhalb des O zu tun nPreRender event

public class CustCtl : WebControl 
{ 
    protected override void OnPreRender(EventArgs e) 
    { 
     base.OnPreRender(e); 

     WebControl parent = Parent as WebControl; 
     if (parent != null) 
     { 
      parent.Attributes.Add("key", "value"); 
     } 
    } 
} 
+0

Danke für Hilfe. Scheint ein bisschen einfacher, es auf meine Art zu tun, weil die Absicht und Bedeutung offensichtlich offensichtlich ist und es viel weniger Arbeit zu tun gibt. –

+0

Ich dachte, Sie haben versucht, ein Attribut zu den Steuerelementen Eltern hinzuzufügen? Ich werde verrückt, weil alle anderen anders geantwortet haben, auch – hunter

+0

Aah ich sehe. Nun interessant, wie der Begriff "Elternelement" als "Elternkontrolle" interpretiert wurde. Aber anscheinend bin ich in der Minderheit. Ich denke HTML, wenn ich das Wort Element höre. Ich formulierte die Frage neu, um das Wort HTML für Klarheit einzubeziehen = D –

0

[Bearbeiten, nachdem alle Kommentare] Einfach, Attributes.Add("key", "value"); in OnPreRender Methode funktioniert

+0

Die Formulierung kann etwas mehrdeutig sein, aber ich stimme nicht zu warum. "Mit diesem Steuerelement" blank bones "würde das ** Elternelement ** als Div-Tag dargestellt." Der Schlüsselbegriff ist Element in diesem Satz.Ich frage in Bezug auf das übergeordnete HTML-Element des Steuerelements. Ich habe im Satz kein Eltern-Control angegeben. –

+0

Entschuldigung für Missverständnis, dann geht Option 2 für Sie! ;) Ich hätte "Wurzelelement" gesagt, denn gerade wenn ich "Eltern" lese denke ich über Elternkontrolle –

+0

haha ​​verständlich. Ich habe die Fragenüberschrift und den Text aktualisiert, um die geklärte Version wiederzugeben. –

0

Ich denke, dass die am besten geeignete Methode oder ein Ereignis außer Kraft zu setzen ist:

protected override void AddAttributesToRender(HtmlTextWriter writer) 
{ 
    writer.AddAttribute("Key", "Value"); 
    base.AddAttributesToRender(writer); 
} 

die msdn prüfen.

Verwandte Themen