[asp.net] scheiden van logica en lay-out

Pagina: 1
Acties:

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:22
Waar ik werk zijn wij momenteel bezig met een product wat door verschillende klanten wordt afgenomen. Nou heb ik pakweg een stuk of 30 user controls die op verschillende pagina's gebruikt worden.

Het probleem zit hem in het feit dat er verschillende lay-outs komen van het product. De aspx pagina's wijzigen wel maar de user controls zijn dusdanig generiek geprogrammeerd dat die qua lay-out altijd hetzelfde mogen zijn.

Wat ik dus wil is die user controls hergebruiken.

Het nadeel van asp.net user controls is dat ze uitsluitend in een web-project te gebruiken zijn. Dit betekent dus dat je ze niet gemakkelijk even in een class library kunt stoppen om deze vervolgens te linken aan het project.

Een andere optie is dan om controls te gebruiken (geen user controls), maar het neemt zeer veel werk in beslag (ten eerste), alhoewel dat niet eens een probleem is, maar daarnaast is het ook niet mogelijk om events te hangen aan een control en dat maakt gebruik onmogelijk. Jammer, want deze zijn wél te linken aan een web project.

Hoe kan ik nou op één of andere manier die componenten gaan hergebruiken? Het moet op één of andere manier wel kunnen lijkt mij, want als je tien branches hebt wil je niet je source code op meerdere plekken aan moeten passen.

Iemand ideeën?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Dennis schreef op dinsdag 16 augustus 2005 @ 15:07:
Het probleem zit hem in het feit dat er verschillende lay-outs komen van het product. De aspx pagina's wijzigen wel maar de user controls zijn dusdanig generiek geprogrammeerd dat die qua lay-out altijd hetzelfde mogen zijn.
Masterpages dus of dynamisch inladen van een .ascx bestand :)
Het nadeel van asp.net user controls is dat ze uitsluitend in een web-project te gebruiken zijn.
Da's nieuw voor mij? Ik heb alles in een class library staan? System.Web.dll is afaik ook geen web project?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:43
Afbeeldingslocatie: http://users.pandora.be/fgzone/pics/wbcl.PNG

:?

https://fgheysels.github.io/


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:22
gorgi_19 schreef op dinsdag 16 augustus 2005 @ 15:09:
Da's nieuw voor mij? Ik heb alles in een class library staan? System.Web.dll is afaik ook geen web project?
Jij hebt een class library met daarin web user controls? Hm, als ik hier een simpel class library project aan een solution toevoeg, dan kan ik bij Add > new item geen web user control toevoegen, hetgeen automatisch betekent (volgens mij) dat er geen .ascx bestand gemaakt kan worden (hooguit een code-behind file).

Met alleen een code behind file is het opzich wel mogelijk, maar er zijn wel enkele beperkingen, afgezien van het feit dat het ontwikkelen veel meer inspanning vergt. Maar zoals gezegd ben ik erg benieuwd naar hoe je dat gedaan hebt.

Overigens werk ik met versie 2003 en kan ik dus nog geen gebruik maken van masterpages.

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:22
:D.
Een andere optie is dan om controls te gebruiken (geen user controls), maar het neemt zeer veel werk in beslag (ten eerste), alhoewel dat niet eens een probleem is, maar daarnaast is het ook niet mogelijk om events te hangen aan een control en dat maakt gebruik onmogelijk. Jammer, want deze zijn wél te linken aan een web project.
Dat heb ik dus nu, maar events zijn een probleem volgens mij.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Dennis schreef op dinsdag 16 augustus 2005 @ 15:12:
[...]

Jij hebt een class library met daarin web user controls? Hm, als ik hier een simpel class library project aan een solution toevoeg, dan kan ik bij Add > new item geen web user control toevoegen, hetgeen automatisch betekent (volgens mij) dat er geen .ascx bestand gemaakt kan worden (hooguit een code-behind file).

Met alleen een code behind file is het opzich wel mogelijk, maar er zijn wel enkele beperkingen, afgezien van het feit dat het ontwikkelen veel meer inspanning vergt. Maar zoals gezegd ben ik erg benieuwd naar hoe je dat gedaan hebt.

Overigens werk ik met versie 2003 en kan ik dus nog geen gebruik maken van masterpages.
Masterpages zijn er ook voor ASP.Net 1.1 :) Paul Wilson heeft die ontwikkeld. Verder is een UserControl in principe niets anders dan een class welke welke UserControl inherit :) Maar wat is het probleem om geen .ascx bestand te gebruiken?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:22
gorgi_19 schreef op dinsdag 16 augustus 2005 @ 15:18:
Masterpages zijn er ook voor ASP.Net 1.1 :) Paul Wilson heeft die ontwikkeld. Verder is een UserControl in principe niets anders dan een class welke welke UserControl inherit :) Maar wat is het probleem om geen .ascx bestand te gebruiken?
Okay, dank je voor de duidelijkheid!

Het probleem wat ik wel eens heb ervaren met complexe user controls is dat events niet gegooid worden als je die in de code-behind defineert, maar wel als je bijvoorbeeld in de ascx <asp:button onClick="blabla"> gebruikt. Vreemd dat dat niet werkt idd, maar het is me toch een keer of twee gebeurd.

Maarja in feite is wat ik nu doe in een control eigenlijk bedoelt om gedaan te worden in een user control, dus als dat kan dan moet ik dat doen vind ik. Ik zag trouwens dat als je een control in een control defineert dat je er gewoon events aan kan hangen. Het lijkt mij dat er dan wat addertjes onder het gras zitten.

In ieder geval ga ik eens kijken naar het inheriten van een UserControl in een class.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 27-04 18:17

gorgi_19

Kruimeltjes zijn weer op :9

Dennis schreef op dinsdag 16 augustus 2005 @ 15:24:
[...]

Okay, dank je voor de duidelijkheid!

Het probleem wat ik wel eens heb ervaren met complexe user controls is dat events niet gegooid worden als je die in de code-behind defineert, maar wel als je bijvoorbeeld in de ascx <asp:button onClick="blabla"> gebruikt. Vreemd dat dat niet werkt idd, maar het is me toch een keer of twee gebeurd.
Waarschijnlijk gooi je dan je controlcollection overhoop ergens (vergelijk maar eens een trace van je pagina voor- en na de postbacks). Ik heb er iig nog nooit problemen mee gehad :)
Maarja in feite is wat ik nu doe in een control eigenlijk bedoelt om gedaan te worden in een user control, dus als dat kan dan moet ik dat doen vind ik. Ik zag trouwens dat als je een control in een control defineert dat je er gewoon events aan kan hangen. Het lijkt mij dat er dan wat addertjes onder het gras zitten.
Welke dan? Zolang je je controlcollection op orde houdt, heb je geen problemen :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 13:22
Nou gorgi, inmiddels had ik e.e.a. geprobeerd en dat werkt prima zoals je had aangegeven. Enig nadeel zonder ascx bestand is dat je zelf de lay-out moet gaan renderen. Leuk hoor, bij complexe tabellen.

Nou heb ik een geniale ( :P ) tussenweg bedacht. Namelijk de code-behind in een apart project zetten (en generiek houden) en de lay-out (de ascx) gewoon behouden en in het project laten staan. Op deze manier blijft de logica in één branch maar de lay-out blijft 100% flexibel (je hebt natuurlijk wel een set controls waar je niet vanaf kunt wijken).

Één van mijn collega's vind het een slecht idee, omdat je de controls (code behind) op deze manier minder flexibel maakt. Ik zelf vind het wel een prachtig idee eigenlijk.

Is dit iets wat vaker wordt gebruikt of is het een lelijke oplossing?
Pagina: 1