[Asp.net] Masterpages met meerdere content pagina's

Pagina: 1
Acties:
  • 590 views sinds 30-01-2008
  • Reageer

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Ik ben eindelijk eens begonnen om te kijken of ik onze website over kan zetten naar Asp.net, maar ik loop nu al tegen een probleem aan waar ik geen oplossing voor kan vinden zo 123. Ik wil gebuik maken van Masterpages voor een vrij layout.

Ik heb mijn masterpage aangemaakt als:
regiohoogeveen.master
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ Master Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Master Page!</title>
</head>
<body>
<div id="container">
    <asp:contentplaceholder id="header" runat="server"></asp:contentplaceholder>
    <asp:ContentPlaceHolder id="leftcontent" runat="server"></asp:ContentPlaceHolder>
    <asp:ContentPlaceHolder ID="maincontent" runat="server"></asp:ContentPlaceHolder>
    <asp:ContentPlaceHolder ID="footer" runat="server"></asp:ContentPlaceHolder>
</div>
</body>
</html>


Deze pagina lijkt me goed. Ik heb er vier placeholders op voor de header, linkerkant, hoofdcontent en een footer. Nu wil ik deze placeholders dus gaan vullen.

default.aspx
ASP:
1
2
3
4
5
<%@ Page Language="VB" MasterPageFile="regiohoogeveen.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="header" Runat="Server">
    Dit moet de header worden
</asp:Content>


En ook dit werkt. Wanneer is nu http://default.aspx opvraagd, dan wordt het getoond zoals het hoort. Alleen nu het probleem waar ik mee zit. Ik wil nu bijvoorbeeld de leftcontent uit een andere pagina halen en dat deze ook een in een placeholder op de masterpage geplaatst wordt. Maar hoe kan ik een tweede bestand opgeven welke dus bv gebruikt gaat worden voor de placeholder leftcontent en een derde voor de maincontent?

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Dat kan niet :) Master pages zijn nogal inflexibel. Wat jij wil zie je in een andere vorm in CMS/frameworks zoals DotNetNuke, als het kopieren van modules.
Binnen dat soort systemen heb je ook veel meer vrijheid t.a.v. templating door de flexibele skinning engine in DotNetNuke onder andere.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je zou kunnen kijken naar webparts, volgens mij kan je daar mee bereiken wat jij wil.

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Oooh dat is weer lekker dan....


eigenlijk wel verwacht dat er een goed werkend template systeem in .net zou zitten :/

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Dat zit er ook in, maar dan in de vorm van User Controls :P

Stel bijv. je hebt een vast paginadesign met 2 balken: zijbalk en contentbalk. Zijbalk bevat bijv. altijd de laatste nieuwsberichten, inlogscherm en zoekbalk, contentbalk bevat voor elke pagina aparte content.

Dan kun je (als je het simpel wilt houden) het volgende doen:
Voor elke pagina een aparte ASPX pagina maken met het paginadesign erin en in de contentbalk de paginacontent
Dan het nieuwslijstje, inlogscherm en zoekbalk alledrie als aparte usercontrols uitwerken en die op elke pagina in de zijbalk zetten.

Voor nog meer flexibiliteit werk je je paginadesign ook uit in een UserControl, en zet je een placeholder in de zijbalk en de contentbalk.
Je neemt 1 ASPX pagina die als input krijgt om welke pagina het gaat,
Vervolgens laadt ie de bijbehorende usercontrol met het paginadesign, en injecteert de nieuwsberichten, inlogscherm en zoekbalk in de zijbalk en de content in de contentbalk.

[ Voor 89% gewijzigd door Not Pingu op 18-01-2006 12:06 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Gunp01nt schreef op woensdag 18 januari 2006 @ 12:02:
Dat zit er ook in, maar dan in de vorm van User Controls :P
Pfff er komt echt teveel ineens op me af joh met zo'n overstap.

Maar ik denk eigenlijk dat ik nu net een oplossing heb gevonden, je kan namelijk Nested Masterpages gebruiken (http://msdn2.microsoft.com/x2b3ktt7.aspx). Alleen nu voer ik de volgende regel in:

Visual Basic:
1
<%@ Master Language="VB" master="Parent.master"%> 


Maar hier komt een validatie fout op, omdat master geen geldig atribuut van het element master is *-), terwijl het toch wel degelijk op msdn staat.

[ Voor 7% gewijzigd door Phenomenon op 18-01-2006 12:09 ]


  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 01-04 20:36

Not Pingu

Dumbass ex machina

Phenomenon schreef op woensdag 18 januari 2006 @ 12:07:

Pfff er komt echt teveel ineens op me af joh met zo'n overstap.
Klopt. ASP.NET kent echt een heel andere manier van werken dan klassiek ASP. Ik heb de overstap ook ooit moeten maken en ik had er ook grote moeite mee, tot ik in voorbeeldcode dook.

Ik zou zeggen, huur bij de bieb een goed beginnersboek over ASP.NET dat je alle nieuwe features uitlegt, kijk naar de code in de Starter Kits en leer hoe dingen ingezet kunnen worden. De oude Portal Starter Kit van v1.1 heeft bij mij echt de ogen geopend.

Certified smart block developer op de agile darkchain stack. PM voor info.


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Gunp01nt schreef op woensdag 18 januari 2006 @ 12:12:
[...]


Klopt. ASP.NET kent echt een heel andere manier van werken dan klassiek ASP. Ik heb de overstap ook ooit moeten maken en ik had er ook grote moeite mee, tot ik in voorbeeldcode dook.
(..)
Jah leren zou ik nog wel moeten doen inderdaad.


Maar iemand een idee waarom

Visual Basic:
1
<%@ Master Language="VB" master="Parent.master"%> 


een fout opleverd? In de msdn staat dat dit mogelijk is.
Validation (ASP.Net): Attribute 'master' is not a valid attribute of element 'Master'.
edit:
Opgelost:In Msdn staat het fout. Het moet MasterPageFile zijn ipv Master

[ Voor 18% gewijzigd door Phenomenon op 18-01-2006 12:52 ]


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Goed ik heb de oplossing gevonden met MasterPages en het kon dus blijkbaar wel. Bedankt hè Gunp01nt :+

MasterPage.master
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ Master Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Master Page!</title>
</head>
<body>
<div id="container">
    <asp:contentplaceholder id="header" runat="server"></asp:contentplaceholder>
    <asp:contentplaceholder id="leftcontent" runat="server"></asp:contentplaceholder>
    <asp:contentplaceholder id="maincontent" runat="server"></asp:contentplaceholder>
    <asp:contentplaceholder id="footer" runat="server"></asp:contentplaceholder>
</div>
</body>
</html>


ChildMasterPage.master
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ Master Language="VB" MasterPageFile="~/MasterPage.master" %>

<asp:Content ID="contentHeader" ContentPlaceHolderID="header" Runat="Server">
    <div id="header">HEADER</div>
</asp:Content>

<asp:Content ID="contentLeftContent" ContentPlaceHolderID="leftcontent" runat="server">
    <div id="leftcontent">LINKERKANT</div>
</asp:Content>

<asp:content id="contentMainContent" ContentPlaceHolderID="maincontent" runat="server">
    <asp:contentplaceholder id="maincontent" runat="server"></asp:contentplaceholder>
</asp:content>

<asp:Content ID="contentFooter" ContentPlaceHolderID="footer" runat="server">
    FOOTER
</asp:Content>


Default.aspx
Visual Basic:
1
2
3
4
5
<%@ Page Language="VB" MasterPageFile="ChildMasterPage.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="maincontent" Runat="Server">
    <div id="maincontent">MAINCONTENT</div>
</asp:Content>


Dus je kan eventueel zoveel mogelijk sub master pagina's aanmaken als je wilt en hiermee dus onderverdelen. Hoewel ik het persoonlijk niet echt een ideale manier van werken vind. Dus als mensen verbeteringen weten, dan hoor ik het graag.

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Gunp01nt heeft nog steeds gelijk. Het gebruik van meerdere master pages is niet de oplossing voor je eerste probleemomschrijving.
Pagina: 1