Binnen een control kan je zeer goed gebruik maken van events. Persoonlijk gebruik ik ITemplate alleen voor templates in controls, zoals bijvoorbeeld een eigen TemplateColumn. Voor de overige templates gebruik ik .ascx bestanden, weliswaar dan zonder de codebehind. Ook kan je dynamische Itemtemplates maken, door een method ITemplate te laten teruggeven als returnvalue. Zie hiervoor
deze tutorial, welke imho een aanrader is als je wat dieper op de materie in wilt gaan en een leuke introductie vormt.
Deze bestanden kan je vervolgens laden met Page.LoadControl(.ascx bestand). Door vervolgens met FindControl aan de weer te gaan, kan je een zekere mate van flexibiliteit krijgen. Ook kan je nog steeds de designer gebruiken, weliswaar moet je dan alleen het bijbehorende .ascx bestand verwijderen.
Je doelt ook nog een aantal keren op VS.Net. Deze kan dus absoluut niet omgaan met de ASP.Net pagina's; een van de meest jammere dingen vind ik ook dat je gedwongen wordt om er automatisch een bijbehorende codebehind bij te nemen (ik heb in ieder geval nog geen optie gevonden om dit uit te schakelen, anyone?

)
ASP.Net heeft echter nog wel meer steken laten vallen; vooral op het gebied van cross browser en HTML 4 compliance, maar dat is een hele andere discussie op zich.

(Voor mensen die hier meer over willen weten: Microsoft heeft bijvoorbeeld de validators IE only gemaakt; zie
hier voor de MSDN link met goede validators. Voor het gedeelte met de problematiek rondom NS 6.2+, Opera, Mozilla in ASP.Net 1.1, zie
dit voor een discussie + oplossingen
Wat je verder aangeeft met de header en de footer moet volgens mij ook wel redelijk eenvoudig overheen te komen zijn. Sowieso lijkt het me makkelijk als je 1 pageTemplate hebt, zoals whoami ook al zegt, welke Page inherit. Vervolgens laadt je hierin automatisch header.ascx en footer.ascx, zodat deze automatisch geladen worden in iedere pagina.
Een andere optie is om met 1 .aspx pagina te werken. Deze heeft als enige doel om een 'verdeler' te zijn. De rest van de 'pagina's' zijn dan .ascx bestanden. Vooralsnog bevalt deze manier van werken mij heel erg. In een applicatie, die oa ik gebouwd heb, hebben we in principe maar 2 .aspx pagina's. Eentje voor het inloggen, en eentje die de 'verdeler' is.
Daarnaast werkt de applicatie met meerdere templates; waarbij iedere template een eigen .ascx bestand is, zonder bijbehorende code-behind. En in dit .ascx worden dan de custom controls geladen.
Waar je wel gelijk in hebt, is dat VS.Net hier niet zo blij mee is. Vandaar dat ik ook heb gekozen om eigenlijk niets te maken dmv de 'VS.Net GUI met het sleur en pleurwerk'. Alles wordt bij mij in controls aangemaakt en dynamisch geladen. Enerzijds werd ik gedwongen; VS.Net ondersteunt niet echt opties tot een goed 'plugin-systeem', anderszijds was de reusuability van controls erg laag. Verder snapt het helemaal niets van dynamische controls.
Om nog even verder te gaan op dynamische controls; aan een aantal posts in PW zie je al heel duidelijk dat er vele valkuilen zitten bij de dynamische controls. Om te beginnen al het moment waarop je controls moet aanmaken, wil je uberhaupt nog 'events in de controls of vanuit de controls' kunnen gebruiken. Beter had wmb ook gedocumenteerd mogen worden wat de volgorde van execution is; sommige mensen willen op het Render moment nog controls gaan toevoegen! CreateChildControls is hier imho de plaats voor; handler van het Load / Init event kan evt. ook nog. Later kan je er iig op rekenen dat je code niet goed werkt.
En het toevoegen en verwijderen van controls aan de controlcollection..

Toevoegen 'nummert' hij automatisch de index 1'tje omhoog; verwijderen nummert hij automatisch niet eentje omlaag. Best logisch enerzijds; anderzijds komt je control bij een postback op een andere plaats terecht, snapt ASP.Net het niet meer en kan je het shaken met je events. Om enigszins iets te illustreren, wordt
hier een tutorial beschreven, inclusief de problematiek en oplossing ervoor.
Wat verder ook heel verleidelijk was, is om veel te gaan werken met het laden d.m.v. POST requests; deze zijn echter vele malen langzamer dan GET-request. Bij een GET wordt namelijk direct een pagina geladen, bij POST eerst nog de oude control, evt. events worden uitgevoerd, en vervolgens wordt de nieuwe pagina geladen. Ergo: dynamisch controls laden, gebaseerd op POST zijn significant langzamer dan dynamisch controls laden, gebaseerd op GET.
Ook zag ik dat clientside scripting niet werkt? Vrij apart; dit kan door 2 oorzaken komen.
1. Gebruik geen relatieve paden, maar absolute paden. Dit kan je oplossen door alles te baseren op Request.ApplicationPath; evt. kan je hier een shared /static method van maken.
2. Een bug in ASP.Net, waardoor je geen <form runat="server"> kan hebben in .ascx bestanden. Dit komt doordat de gegenereerde Javascript in .Net Framework 1.1 niet correct is. Voor meer info, zie
Deze post op asp.net forums en de bijbehorende oplossingen
Verder heb ik geen enkel probleem nog gehad met Javascripting, afgezien van de bugs in ASP.Net met betrekking tot de javascripts.
Ergo: Qua layout vind ik dat ze flexibel genoeg zijn, zeker met de mogelijkheden tot custom controls. Waar ze echter gruwelijk in gefaald hebben, is een duidelijke en nette methode naar buiten brengen en documenteren, zoals bijvoorbeeld bij ASP.Net Forums. De eerder uitgebrachte applicaties, zoals IBuySpy en IBuyPortal, wekken de indruk dat dit netjes geregeld is, maar laten een aantal oplossingen zijn welke imho beter kunnen. (Bijvoorbeeld de scheiding content / layout en de datalayer).
Een ander is wat erg jammer is, is dat VS.Net, mbt het ASP.Net gedeelte, enorm gefocussed is op RAD, en niet op 'netjes en goed coden' van een ASP.Net applicatie.
[
Voor 74% gewijzigd door
gorgi_19 op 02-10-2003 00:04
]