Avatar billede mn Nybegynder
29. december 2006 - 23:52 Der er 9 kommentarer og
1 løsning

ASP.NET 2.0 og benyttelse af custom controls fra eget projekt

Hej,

Jeg har et simpelt webprojekt, jeg gerne vil flytte over på 2.0. Jeg har i mit gl. projekt lavet en del custom controls. Altså typisk kontroller, hvor jeg arver fra en eksisterende kontrol fx System.Web.UI.WebControls.CheckBox.

I 1.1 frameworket blev dll-filen navngivet ud fra namespacet, men en standard 2.0'er kører jo "uden" namespace. Før kunne jeg bare tilføje kontroller fra min egen dll-fil ved at browse til dem. Det duer ikke rigtigt længere, så vidt jeg ser det.

Jeg har læst på denne blog http://www.123aspx.com/redir.aspx?res=35302 at man kan tilføje både sine user controls og custom controls via web.config. Det ser rigtig smart ud, og jeg kan også sagtens på førstnævnte til at virke.
Men hvordan gør man med custom controls? Jeg benytter andre af mine klasser der er i projektet, direkte i mine controls, så jeg vil helst ikke lave et seperat projekt. Det vil gøre det bøvlet - som jeg lige ser det.

Håber der er nogle der har været ude for det samme, og som kan komme med sine erfaringer her.

Mvh. Morten
Avatar billede dr_chaos Nybegynder
30. december 2006 - 10:39 #1
Jeg vil lige tage udgangspunkt i en customcontrol i et namespace, jeg selv har lavet.

Øverste del af klasse erklæringen:
namespace TmsControls
{
    public class TmsDatePicker : WebControl, ICallbackEventHandler

For at tilføje den til mit web projekt har jeg tilføjet følgende linier i web.config
<pages>
            <controls>
                <add tagPrefix="tms" namespace="TmsControls" assembly="TmsControls"/>
               
            </controls>
        </pages>


På den måde kan du få adgang til en lang række kontroller, fra et namespace.
Avatar billede mn Nybegynder
30. december 2006 - 15:33 #2
Hej,

Det du laver der er at benytte controls fra et andet namespace. Jeg har en løsning hvor jeg har nogle custom controls direkte i mit webprojekt.
Mine controls benytter sig af andre klasser der er i det.
Hvis jeg skal lave et seperat projekt hvor jeg placerer mine control, der skal have adgang til webprojektets klasser tror jeg det begynder at blive lidt langhåret, da webprojektet jo så også skal benytte det projekt jeg har kontrollerne i. lidt cirkulær reference agtigt.

Håber min forklaring giver mening.

Hvis jeg skal skrive en lidt pseudo-agtig syntax på det jeg gerne vil, ville det være noget i denne stil:

<pages>
<controls>
  <add tagPrefix="test" namespace="." assembly="." src="testcontrol.cs"/>
</controls>
</pages>
Forstået på en måde at jeg har selve klassen liggende i samme projekt... men jeg er godt klar over at ovenstående ikke duer.

Jeg er meget interesseret i best practises på dette.

Mvh. Morten :o)
Avatar billede dr_chaos Nybegynder
30. december 2006 - 15:36 #3
hmm cirkulær reference lyder ikke alt for godt :)
men ok,
du har vel prøvet:
<pages>
<controls>
  <add tagPrefix="test" src="testcontrol.cs"/>
</controls>
</pages>

Fordelen ved customercontrol i eksterne dll'er er jo netop at det gør dem nemme at flytte og bruge andre steder.
Hvad type kontrol er det du har lavet ?
Avatar billede mn Nybegynder
30. december 2006 - 16:15 #4
Hej igen,

Ja. det har jeg prøvet. Det går ikke. Får følgende besked :

Invalid or missing attributes found in the tagPrefix entry. For user control, you must also specify 'tagName' and 'src'. For custom control, you must also specify 'namespace', and optionally 'assembly'.

Jeg er helt med på fordelen i genbruget, men i dette tilfælde er det fordelagtigt at have nogle kontroller der har noget af logikken fra projektet med sig. Fx en CurrenPerson-property, der afspejler den bruger der er logget ind. Kontrollen opfører sig så forskelligt afhængigt af personens rettigheder osv...
Avatar billede dr_chaos Nybegynder
30. december 2006 - 16:26 #5
Jeg tror ikke du kan gøre det du vil.
Så skal du lave det om til en usercontrol.
Den kan du så lave til en custom control som beskrevet i denne artikel:
http://www.codeproject.com/useritems/ConvertUserToCustom.asp
Avatar billede mn Nybegynder
30. december 2006 - 21:53 #6
Hmm... Det burde altså kunne lade sig gøre.
Jeg prøvede lige at lave et lille eksempel, hvor jeg tilføjer den fra code behind filen.
Jeg har lavet en simpel klasse, MyLinkButten, der arver fra System.Web.UI.WebControls.LinkButten. I PageLoad har jeg sat dens .Text til "test", så jeg kan se at det er min kontrol der er i brug.
På default.aspx tilføjer jeg en placeholder (PlaceHolder1). I page load skriver jeg MyLinkButten mlb = new MyLinkButton;
PlaceHolder1.Controls.Add(mlb);

Når jeg kører det, bliver min kontrol vist lige så fint. Så er det jeg tænker. Det må simpelthen også kunne lade sig gøre at lave det i design-time. På en eller anden vis.

Anyone?

Morten :o)
Avatar billede dr_chaos Nybegynder
31. december 2006 - 09:33 #7
Jeg tror måske det kan lade sig gøre ved at smide din custom control i et namespace.
Prøv at tjekke her: http://64.233.183.104/search?q=cache:UmHlCITxSVQJ:msdn2.microsoft.com/en-us/az5kdaz0.aspx+custom+control+app_code&hl=da&gl=dk&ct=clnk&cd=1&client=firefox-a
Avatar billede mn Nybegynder
01. januar 2007 - 14:30 #8
Hej igen,

Syret. Jeg synes helt sikkert jeg havde prøvet det, men det gør tricket!

Stik mig et svar, så får du nogle points.

Morten :o)
Avatar billede dr_chaos Nybegynder
01. januar 2007 - 15:20 #9
svar :)
Godt du fandt en løsning.
Avatar billede mn Nybegynder
01. januar 2007 - 20:47 #10
Jeps. Mange tak for hjælpen.
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
Kurser inden for grundlæggende programmering

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