Ik schop even dit (oude) topic weer omhoog omdat ik nu de oplossing heb gevonden !
En aangezien het erg handig werkt, wil ik dat jullie toch niet onthouden.
De ascx-file voor de PageContainer:
HTML:
1
2
3
4
5
6
7
8
| <%@ Control Language="c#" AutoEventWireup="false" Codebehind="PageContainer.ascx.cs" Inherits="Maikel.PageContainer" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%">
<tr height="100%">
<td>
<asp:PlaceHolder id="bodyContainer" runat="server" />
</td>
</tr>
</table> |
De codebehind voor de PageContainer:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| namespace Maikel
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Collections;
using System.Collections.Specialized;
using System.Text;
/// <summary>
/// Summary description for PageContainer.
/// </summary>
[ParseChildren(ChildrenAsProperties = true)]
public abstract class PageContainer : UserControl
{
protected PlaceHolder bodyContainer;
private PlaceHolder body;
protected PageContainer()
{
this.Load += new System.EventHandler(this.Page_Load);
this.Init += new System.EventHandler(OnInit);
}
private void Page_Load(object sender, System.EventArgs args)
{
}
public PlaceHolder Body
{
get
{
return body;
}
set
{
body = value;
}
}
protected void OnInit(object sender, EventArgs args)
{
if (body != null)
{
bodyContainer.Controls.Add(body);
}
}
}
} |
Het gebruik in een aspx-pagina:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <%@ Page language="c#" Codebehind="PageContainerTest.aspx.cs" AutoEventWireup="false" Inherits="Maikel.PageContainerTest" %>
<%@ Register TagPrefix="vtw" TagName="PageContainer" src="PageContainer.ascx" %>
<!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<title>PageContainer test</title>
</head>
<body>
<form method="post" runat="server" ID="Form1">
<vtw:pagecontainer id="pageContainer" runat="server">
<body>
Blablablabla
<asp:TextBox id="text1" runat="server" />
</body>
</vtw:pagecontainer>
</form>
</body>
</html> |
In de codebehind van de aspx-pagina kun je nu gewoon alle objecten die tussen de body-tags van in de PageContainer staan als 'protected' declareren en gebruiken zoals in elke andere aspx-pagina.
Voordeel is nu wel dat je in de ascx-file (de control zelf dus) een hele hoop design-onderdelen die nooit wijzigen kunt plaatsen. Alles wat tussen de body-tags van de PageContainer staat wordt op de plaats van de bodyContainer-placeholder gezet. Ook kun je in de ascx-file gewoon weer alle controls gebruiken die je normaal ook kunt gebruiken. Deze zijn dan alleen toegankelijk vanuit de codebehind van de control.
Ik hoop dat het een beetje duidelijk is allemaal.
Zo niet, mail me maar.
Ik gebruik 'm nu door het hele project waar ik nu mee bezig ben. Erg handig aangezien ik me nu helemaal geen zorgen meer hoef te maken om het design en in de aspx-file komt nu alleen HTML die specifiek voor die pagina is.
[
Voor 10% gewijzigd door
maikel op 06-12-2002 12:49
]