Meine Anwendungsschnittstelle bietet Eingang Endbenutzer-Markup zu erstellen, das, von dem ich ein Steuerelement mit Vorlagen bin mit für:ASP.NET, doppelte IDs und Templated Control ... Gibt es einen eleganteren Weg?
<me:MyControl>
<TemplateA>
I'm inside of an ITemplate
</TemplateA>
<TemplateB>
So what, I am too.
</TemplateB>
</me:MyControl>
ich doppelte Kontrolle IDs in Web-Kontrollen innerhalb dieser Vorlagen ermöglichen muß. Jetzt weiß ich, dass ich nicht eine doppelte ID innerhalb einer einzigen Vorlage haben kann, aber ich kann dies tun:
<me:MyControl>
<TemplateA>
<me:Textbox Id="ABC" />
</TemplateA>
<TemplateB>
<me:Textbox Id="ABC" />
</TemplateB>
</me:MyControl>
Was ich will ist zu tun, anstatt die Vorlagen über Eigentum zu machen:
<TemplateContainer(GetType(HelloWorld))>
<PersistenceMode(PersistenceMode.InnerProperty)>
Public Property TemplateA() As ITemplate
Protected Overrides Sub CreateChildControls()
If TemplateA IsNot Nothing Then TemplateA.InstantiateIn(Me)
If TemplateB IsNot Nothing Then TemplateB.InstantiateIn(Me)
MyBase.CreateChildControls()
End Sub
Ich möchte sie mithilfe eines benutzerdefinierten Klassentyps erstellen, der ITemplate implementiert. Allerdings, wenn ich dies tun, ich Fehler über doppelten IDs erhalten:
Hier ein Beispiel: https://msdn.microsoft.com/en-us/library/0e39s2ck.aspx
So kann ich Eigenschaften haben kann und sogar die Steuer Builder-Klasse außer Kraft setze in benutzerdefinierten Steuerelemente ohne hässlichen Markup zu ziehen.
Anstatt also diese:
<me:MyControl>
<TemplateA>
<me:BaseControl Hello="World" Foo="Bar">
More controls inside
</me:BaseControl>
</TemplateA>
</me:MyControl>
ich das tun kann:
<me:MyControl>
<TemplateA Hello="World" Foo="Bar">
More controls inside
</TemplateA>
</me:MyControl>
So letztlich mehr als alles, was dies alles über die doppelte Steuer-ID Problem zu lösen, und ich brauche, um das Ende Benutzer, um die Möglichkeit zu haben, diese ID zu setzen, so dass die IDs nicht in Frage kommen. Ich möchte diese in der Lage sein zu tun:
<me:MyControl>
<TemplateA PropertyA="Hello" PropertyB="World">
<asp:Textbox Id="Test" />
</TemplateA>
<TemplateA PropertyA="Foo" PropertyB="Bar">
<asp:Textbox Id="Test" />
</TemplateA>
</me:MyControl>
Also ... Ich muss innerhalb ihrer eigenen Instanz der Kontrolle doppelte IDs haben zu können, die ich keine andere Art und Weise kennen diese andere zu tun, als sie zu sein innerhalb einer Vorlage, aber ich möchte nicht TemplateA, TemplateB, etc. Ich muss in der Lage sein, Eigenschaften an diese Templates zu übergeben (Erzeuge sie als eine Klasse anstatt einer inneren Eigenschaft, bekomme aber immer noch doppelte ID-Fehler, wenn ich das tue diesen Weg).
Ich schrieb meine Beispiele in vb.net, aber C# Unterstützung ist willkommen mit einem Lächeln. Dies ist eine asp.net Frage im Allgemeinen. Jede Hilfe wird sehr geschätzt. Ich habe eine schwere Zeit damit.
scheiterte ich dies so entschuldigen antworten ich. Ich sehe nicht, wie dies funktionieren würde, wenn es dem Benutzer ermöglicht wird, das Steuerelement mit Vorlagen zu manipulieren und den Builder für die Analyse des Inhalts der Datei ascx zu verwenden. – user1447679