Avatar billede Slettet bruger
19. maj 2003 - 08:25 Der er 31 kommentarer og
1 løsning

Hjælp til templates og user controls

Jeg sad og kiggede lidt på hvordan man laver et design/template der skal benyttes overalt på ens aspx sider.

Jeg har f.eks. oprettet 2 usercontrols, den ene indeholder:

<html>
<head>
</head>
<body>
<table>
<tr><td>

Den anden indeholder:

</td></tr>
</table>
</body>
</html>

Jeg har så oprettet en default.aspx fil hvor de to usercontrols benyttes og mellem de 2 user controls har jeg placeret en label.

Er det smart? Jeg tvivler selv.

Det skal lige siges at de 2 usercontrols er mere komplekse end html koden vist ovenfor, dvs. de indeholder mere html.

Jeg benytter Visual Studio.net
Avatar billede guidmaster Nybegynder
19. maj 2003 - 08:28 #1
Prøv at tage et kig på denne artikel omkring Templates:
http://www.dotnetforum.dk/DesktopDefault.aspx?tabindex=5&tabid=106&article=7
Avatar billede Slettet bruger
19. maj 2003 - 08:34 #2
Den har jeg tidligere læst, finder den ikke så brugbar.

Det skal lige siges at jeg har læst diverse artikler m.m. men jeg har svært ved at finde frem til den bedste løsning.
Avatar billede guidmaster Nybegynder
19. maj 2003 - 08:38 #3
Men hvad er dine behov? Ovenstående artikel viser jo hvordan du får en ensartet side med forskelligt content ?
Avatar billede Slettet bruger
19. maj 2003 - 08:45 #4
Jeg søger ikke links til artikler, jeg søger et svar fra nogen der har stor erfaring med ASP.NET, så jeg vælger den bedste metode.

Min metode skiller jo også content fra layout, men det er ikke nok, der er også et performance issue.
Avatar billede guidmaster Nybegynder
19. maj 2003 - 09:47 #5
Jeg vil mene at artiklens pointe er okay. Du har adskildt design og content, du har mulighed for at loade dine kontroller dynamisk mm.
Mht. performance skulle det jo være ligemeget da det hele under alle omstændigheder bliver kompileret ;)
Avatar billede odegaard Nybegynder
19. maj 2003 - 09:50 #6
ja det er da skide smart! Det har jeg altid benyttet. På den måde skal man kun vedligeholde sit design ét sted. Alt indhold på siden smider man så blot imellem de to usercontrols.
Jeg kan dog lige tilføje at jeg har tilføjet nogle variable til header-kontrollen således at jeg fx. kan tilføje en title til siden via min kontrol.
Avatar billede odegaard Nybegynder
19. maj 2003 - 09:52 #7
il da lige tilføje at jeg har fire CMS sites kørende der alle benytter netop din beskrevne metode.
Det har været med stor succes.
Avatar billede Slettet bruger
19. maj 2003 - 09:53 #8
Det lyder godt odegaard, jeg synes nemlig den artikel guidmaster linker til er alt for bøvlet, især med henblik på at ASP.NET skulle være nemmere ;)
Avatar billede Slettet bruger
19. maj 2003 - 09:53 #9
odegaard benytter du visual studio?
Avatar billede odegaard Nybegynder
19. maj 2003 - 09:57 #10
både ja og nej. Jeg bruger den mest til komponenter og DLL'er. Når jeg koder design kan jeg godt li' at være "in control", og hvis jeg vil det i VS.NET så mister jeg alligevel intellisence.

Til guidmasters artikel vil jeg lige sige:
Det er nu en meget smart fremgangsmåde men besværlig at vedligeholde/overskue. Specielt pga. de mange AddText("<HTML>") kald. Hér ville det være noget smartere at embedde en HTML-fil i DLL'en som du istedet kalder frem.
Jeg har benyttet dette til at generere javascripts i en af mine custom controls.
Avatar billede Slettet bruger
19. maj 2003 - 10:11 #11
Ok, jeg gik nemlig og overvejede at ændre min html kode til:

<html runat="server">
<head runat="server">
</head runat="server">
<body runat="server">
<table runat="server">
<tr><td runat="server">
</td></tr>
</table>
</body>
</html>

Men det er jo så ikke nødvendigt.
Avatar billede odegaard Nybegynder
19. maj 2003 - 10:29 #12
nej det får du vist ikke noget ud af. Det er kun anvendeligt når du samtidigt vil give dem et ID som du kan kalde fra codebehind (det er selvfølgelig noget andet med webcontrols).
Avatar billede Slettet bruger
19. maj 2003 - 11:40 #13
odegaard>"Jeg kan dog lige tilføje at jeg har tilføjet nogle variable til header-kontrollen således at jeg fx. kan tilføje en title til siden via min kontrol."

Hvordan?

Det driller mig nemlig lidt.

Lad os antage jeg har lavet en head.ascx i denne har jeg:
<html>
<head>
<title>

</title>
</head>
<body>

Min defaul.aspx side har jeg tilføjet header.ascx hvordan benytter jeg så variabler?

Jeg har prøvet mig lidt frem, men det kører ikke helt.
Avatar billede odegaard Nybegynder
19. maj 2003 - 11:44 #14
Hvis du har erklæret dine variable i usercontrollen public, så kan du blot kalde dem vha.
<mycontrols:header minVar="123" runat="server" />

I usercontrollen sætter du dem så bare ind på deres plads fx. via webcontrols i page_load eventet, eller direkte vha <% =minVar %>

Skal det være lidt smartere med viewstate og get/set parametre, så skal du lave en public property i usercontrollen, men det er der vist ikke den store grund til at gå ind i.
Avatar billede Slettet bruger
19. maj 2003 - 12:01 #15
hmmm det fatter jeg ikke lige helt.

Jeg laver i codebehind på usercontrollen en Dim MyVar as String

I Selve udercontrollen tilføjer jeg mellem <title> og </Title>
<%=MyVar%>

På default.aspx siden tilføjer jeg i codebehind:
MyVar = "Tester lige"

Men det virker ikke.


Jeg er ikke helt med på <mycontrols:header <-hvad er det?
Avatar billede odegaard Nybegynder
19. maj 2003 - 12:04 #16
Du skal jo give din usercontrol et ID i default.aspx.
Så kalder du din dim med myControl.MyVar = "TesterLige", hvor ID'et på din kontrol her er "myControl".
Jeg mener ikke det er nok at skrive
Dim MyVar As String
Den skal vist erklæres Public:
Public MyVar As String
Avatar billede odegaard Nybegynder
19. maj 2003 - 12:04 #17
øh du kalder ikke din dim men din variabel :-)
Avatar billede Slettet bruger
19. maj 2003 - 12:05 #18
ahhh jeg prøver lige lidt ;)
Avatar billede Slettet bruger
19. maj 2003 - 12:18 #19
Det hjalp at sætte Puplic MyVar men

I default.aspx har jeg:

<%@ Register TagPrefix="uc1" TagName="Top" Src="Top.ascx" %>
<uc1:top id="Top1" runat="server"></uc1:top>
Jeg har på top.aspx siden skrevet:
<title>
<%=MyVar%>
</title>


Hvordan sætter jeg så variablen MyVar?

Jeg har prøvet på default.aspx siden i codebehind at skrive uc1.Top = "Tester" men det virker ikke.
Avatar billede odegaard Nybegynder
19. maj 2003 - 12:23 #20
<uc1:top id="Top1" myVar="Dette er sidens titel" runat="server"/>
Avatar billede odegaard Nybegynder
19. maj 2003 - 12:24 #21
eller alternativt i codebehind:
Top1.myVar = "Dette er sidens titel"
Avatar billede Slettet bruger
19. maj 2003 - 12:27 #22
Dette virker:
<uc1:top id="Top1" myVar="Dette er sidens titel" runat="server"/>

Men dette virker ikke:
eller alternativt i codebehind:
Top1.myVar = "Dette er sidens titel"

Der står Top1 is not declared
Avatar billede odegaard Nybegynder
19. maj 2003 - 12:29 #23
hvis du arbejder med rigtig codebehind (dvs. i to filer) skal du jo også dim'e din control i codebehindfilen !
Avatar billede Slettet bruger
19. maj 2003 - 12:33 #24
ah ok, men vel ikke som public denne gang.
Avatar billede Slettet bruger
19. maj 2003 - 12:37 #25
Hvad skal Top1 Dim'es som?
Avatar billede odegaard Nybegynder
19. maj 2003 - 12:41 #26
Det er vist ved at være på tide at du selv læser lidt om usercontrols :-)
http://msdn.microsoft.com/library/en-us/cpguide/html/cpconwebformsusercontrols.asp
Det får du nok noget mere ud af i det lange løb.
Avatar billede Slettet bruger
19. maj 2003 - 12:49 #27
det har jeg kigget på, problemet er at jeg har dimmet Top1 som WebControl, men min variabel MyVar kan ikke defineres, andre variabler så som color m.v. kan fint defineres.
Avatar billede Slettet bruger
19. maj 2003 - 13:59 #28
Grr. jeg kan ikke få det til at virke med codebehind.


Default.aspx:
<%@ Register TagPrefix="uc1" TagName="Top" Src="Top.ascx" %>
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="default.aspx.vb" Inherits="skabelon.design"%>
<uc1:top id="Top1" runat="server"></uc1:top>

Default.aspx.vb
Public Class design
    Inherits System.Web.UI.Page
    Private Title As String
    Private Top1 As UserControl


#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Top.ascx
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="Top.ascx.vb" Inherits="skabelon.Top" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>
<%=Title%>
</title>

Top.ascx.vb
Public MustInherit Class Top
    Inherits System.Web.UI.UserControl
    Public Title As String

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load




    End Sub

End Class
Avatar billede odegaard Nybegynder
19. maj 2003 - 18:01 #29
hehe... et godt eksempel hvorfor jeg altid arbejder med det hele i én fil. Istedet deler jeg kode og design i top og bund. Det sparer en masse besvær, og så får man ikke en masse intetsigende filer på sin server :-)
Avatar billede Slettet bruger
19. maj 2003 - 18:11 #30
hmmm, ikke meget nyttig info.

Jeg synes ikke det er uoverskueligt, Jeg har en usercontrol med codebehind og en default.aspx side med codebehind.
Avatar billede Slettet bruger
24. maj 2003 - 08:00 #31
Lukker
Avatar billede odegaard Nybegynder
24. maj 2003 - 10:55 #32
Har du 15 sider og 5 usercontrols, så har du jo allerede 40 filer istedet for 20. Det var blot min pointe.
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