11. september 2002 - 13:26Der er
5 kommentarer og 2 løsninger
overloade control.render()
Kan jeg overloade control.render() i en for-løkke ?
Jeg vil gerne kunne sætte et <div> tag rundt om nogle server ctrls, alt efter om de er specificeret i en liste. Og uden at skulle lave en ny klasse pr eksisterende server ctrl.
Jeg tænkte på noget ala følgende i page_init metoden:
for each c in controls c.onRender = myRender next
function myRender() return "<div>" + base.render(...) + "</div>" end function
Den eneste måde at opnå det ønskede resultat på, er ved at lave din egen kontrol klasse. Alle web kontroller udstiller ganske vist et Load og et PreRender event, men med det kan du kun starte div taggen, ikke slutte den. Den rigtige (og eneste) måde er at lave en klasse:
public class MyWebControl : System.Web.UI.WebControl { /*Constructor, angiv selv den tag du skal bruge i kaldet til base constructoren*/ public MyWebControl() : base(HtmlTextWriterTag.Table) { mustStartDiv = false; }
/*Property der angiver om denne instans skal starte med at rendere et div tag*/ private bool mustStartDiv; public bool MustStartDiv { get { return mustStartDiv; } set ( mustStartDiv = value; } }
/*Override af RenderBeginTag*/ protected override RenderBeginTag(HtmlTextWriter w) { /*Hvis MustStartDiv er true, så start div tag */ if (MustStartDiv) { w.RenderBeginTag(HtmlTextWriterTag.Div); } /*Kald base.RenderBeginTag*/ base.RenderBeginTag(w); }
/*Override af RenderEndTag */ protected override void RenderEndTag(HtmlTextWriter w) { /*Hvis MustStartDiv er true, så afslut det i RenderBeginTag startede div*/ if (MustStartDiv) { w.RenderEndTag(); } /*Kald base RenderEndTag*/ base.RenderEndTag(w); } }
cms>> For lige at være en flueknepper, så findes der ikke en ServerControl klasse i frameworket. Hvis du vil lave en server kontrol med UI, så skal du arve System.Web.UI.WebControl og vil du lave en uden, skal du arven System.Web.UI.Control (i hvert fald sådan i grove træk)
z42>> Thanx - jeg kunne ikke lige huske navnene, så jeg brugte bare et 'for sjov' navn. Jeg bruger min egen parser som konverterer denne dybe programmering til flad (kald af simple procedurer i stedet for methods i controller, da hundreder af controller i mit nuværende projekt ville stille urimelige krav til hukommelse) - så det er ikke tit jeg møder WebControl og dets lige. Men ih hvor jeg elsker ASP.net, og jeg ser frem til nogle gode diskussioner herinde! TKnudsen>> Held og lykke :) Du siger til når det brænder på igen..
Christian
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.