Avatar billede tknudsen Nybegynder
11. september 2002 - 13:26 Der 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
Avatar billede tknudsen Nybegynder
11. september 2002 - 14:03 #1
Det kan godt være at det lyder som begrebsforvirring, men i bund og grund vil jeg bare tilføje noget til en server controls html.
Avatar billede cms Nybegynder
11. september 2002 - 14:36 #2
Du vil 'override' den - ikke overloade.

du kan vel lave din egen Control, som inheriter fra en Server control

fx

public class MyControl : ServerControl {
  public override Render(...){
    ...
    base.Render(...);
    ...
  }
}
Avatar billede tknudsen Nybegynder
11. september 2002 - 15:09 #3
cms >> tak for irettesættelsen - jeg forveklser altid de to ord :-)
Avatar billede z42cool Nybegynder
11. september 2002 - 15:18 #4
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);
  }
}
Avatar billede z42cool Nybegynder
11. september 2002 - 15:20 #5
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)
Avatar billede tknudsen Nybegynder
11. september 2002 - 15:21 #6
jeg bukker og takker
Avatar billede cms Nybegynder
12. september 2002 - 00:12 #7
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester