Hej! Man bygger sin usercontrol, registrerar den högst upp på sidan där den ska ligga och sedan lägger man en kontroll i sidan där den skall ligga. ;) Hej igen! Ja, om du vill ha hela högra delen av sidan likadan på alla sidor så kan du göra den till en user control. Hej igen! Hej! Eftersom .NET är ett objekt-orienterat språk och en sida eller kontroll är en klass så kan man använda sig av OOP-standard. usercontrol i asp.net
Istället för att använda frames till min meny som ska ligga överst på alla mina sidor, tänkte jag skapa en usercontrol med meny-länkarna i istället.
Jag är ny på asp.net och undrar om någon har förlsag på hur man enklast löser detta?
TIckelitack!
/SofiaSv: usercontrol i asp.net
Skämt åsido, högst upp i sidan lägger man en rad som gör att sidan vet var kontrollen finns.
<code>
<%@ Register TagPrefix="PDC" TagName="HeaderTemplate" Src="~\Templates\HeaderTemplate.ascx" %>
</code>
Sedan lägger man in kontrollen som man gör med vilken kontroll som helst, och använder TagPrefix och TagName som angetts ovan.
<code>
<PDC:HeaderTemplate id="HeaderTemplate" runat="server" />
</code>
Kontrollen bygger man som vilken asp.net sida som helst.
Rekommenderar att du tar en titt på exemplen på asp.net, http://asp.net/Tutorials/quickstart.aspx
Jag har även skrivit om ett par kontroller i min blog, http://www.pdc.se/blog
Det finns mängder av artiklar som beskriver både User Controls och Server Controls på .net sajterna. T.ex. aspalliance.com, www.4guysfromrolla.com, asp.net, m.m.Sv: usercontrol i asp.net
En fråga hur ni som vet tycker att man ska lösa följande;
Jag vet att man i .net inte bör se frames som ett alternativ (det är väl många som tyckt så redan innan .net iofs) - därav ovanstående lösning med menyn. Som funkar kalas!
Men om jag vill ha motsvarande en höger-frame, alltså att hela högra delean av sidan ska vara likadan på alla sidor, hur gör man då? Är det fortfarande lösning m.h.a user controls som gäller....? Känns knasigt att "reservera" utrymme på höjden.
En annan sak - min usercontrol motsvarar övre delen av varje sida innehållande en meny, logga samt en bild. Denna bild ska vara olika på olika sidor.
Kan man på något smidigt sätt byta ut bildens url i ascx-filen beroende på vilket menyval man gjort eller är det enklare att lägga ut bilden på varje sida (alltså att ta bort den från user controlen)?
Mycket med det nya! Men Kul!!!
Tack/SOfiaSv: usercontrol i asp.net
En annan lösning är att använda MasterPages. De "riktiga" MasterPages kommer inte förrän i .net 2.0 men det finns lösningar som fungerar på samma sätt. http://www.wilsondotnet.com/ har en lösning jag själv använder i t.ex. min blog. Har även skrivit några inlägg om detta.
Det finns även en liknande lösning på http://metabuilders.com/Tools/MasterPages.aspx
Vad det handlar om är att du gör en User Control som innehåller en hel sida. Meny, din högerdel och hela layouten för en vanlig grundsida. Där innehållet som ändrar sig från sida till sida skall ligga lägger man en placeholder.
Sedan skapar man en .aspx sida. I den sidan registrerar man mallkontrollen och visar. Sedan lägger man in det innehåll som skall visas i de olika placeholders som finns.
Då har man sin layout på ett enda ställe om något behöver ändras.
Angående din menyfråga. Ja, man kan byta ut bilden.
Det du gör är att du:
1. Lägger in bildens ImageURL i kontrollens code-behind.
2. Lägger till en property i din kontroll, t.ex en sträng som heter MenuImage
3. I kontrolltaggen i aspx-sidan skriver man MenuImage="sidbilden.jpg"
4. I Page_Load i kontrollen skriver man menyBilden.NavigateURL = MenuImage
Denna lösning kan du dock inte använda om du använder MasterPages eftersom kontrollen läggs i mallen. Man kan istället styra detta med att man skickar med ett pageid i url:en hela tiden.
Nu har du kanske lite mer att börja med i alla fall.Sv: usercontrol i asp.net
Jag har nu löst det med hjälp av enbart usercontrols, en högst upp på sidan samt en till höger.
Jag ska hämta värdet för bildens url från en sql-databas.
Steg enligt ditt förslag på lösning;
"2. Lägger till en property i din kontroll, t.ex en sträng som heter MenuImage"
Jag får inte till denna syntax, skulle du kunna tipsa om detta?
"3. I kontrolltaggen i aspx-sidan skriver man MenuImage="sidbilden.jpg""
Gärna ett litet kodtips även här.....
"4. I Page_Load i kontrollen skriver man menyBilden.NavigateURL = MenuImage"
Antar att du menar pageload för den sidan som öppnas efter att ett menyval gjorts? Kommer jag här åt menybilden? Den ligger ju i ascx-filen?
1000000 tack!
/SofiaSv: usercontrol i asp.net
Jag har löst det nu, anävnde mig av en variabel istället för property så får jag kolla upp properys-syntaxen senare.
Tack!Sv: usercontrol i asp.net
Det innebär att man helst ska använda privata variabler i klassen och sedan låta utomstående klasser komma åt dessa genom ett interface. Ett interface består då av properties och metoder.
I det här fallet skulle kontrollen kunna se ut så här:
<code>
Private _menuImage as String
Protected imgMenuImage as Image
Public Property MenuImage() As String
Get
Return._menuImage
End Get
Set(ByVal Value)
_menuImage = Value
End Set
End Property
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
imgMenuImage.ImageURL = _menuImage
End Sub
</code>