Ik heb een fundamenteel probleem in het ontwerp van mijn ASP website.
Ik gebruik een HTML pagina die een eigen CustomControl beheerd voor de content. Deze ContentFrame Control vult zijn ChildControls op basis van de acties van de user. Hiervoor wordt een currentpage bijgehouden binnen de ContentFrame. Wanneer een gebruiken op een LinkButton klikt wordt in de Click eventhandler de currentpage en evt andere waarden geset, en wordt een Update methode aangeroepen die dan opnieuw de goede ChildControls aanmaakt.
Hieronder wat code van de ContentFrameControl:
Het grote probleem is dat bij een postback de member-variablen van de ContentFrameControll null zijn. Dit is voor zover ik lees op internet bekend gedrag, echter zou ik graag toch dit ontwerp van controls aanmaken enigzinds behouden.
Ik heb ook geprobeerd variabelen tijdens de Click eventhandler in de ViewStates op te slaan, en een Update() call in de Init fase te doen maar dat lijkt ook niet te helpen.
Zie ik iets over het hoofd of heb ik een grote ontwerp fout gemaakt?
Ik gebruik een HTML pagina die een eigen CustomControl beheerd voor de content. Deze ContentFrame Control vult zijn ChildControls op basis van de acties van de user. Hiervoor wordt een currentpage bijgehouden binnen de ContentFrame. Wanneer een gebruiken op een LinkButton klikt wordt in de Click eventhandler de currentpage en evt andere waarden geset, en wordt een Update methode aangeroepen die dan opnieuw de goede ChildControls aanmaakt.
Hieronder wat code van de ContentFrameControl:
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
53
54
55
| public class ContentFrameControl : Control, INamingContainer { private static eCurrentPage currentPage = eCurrentPage.WeblogOverview; public static eCurrentPage CurrentPage { get { return currentPage; } } private int weblogMessageID; // Set this member before requesting to display weblogmessage public int WeblogMessageID { get { return weblogMessageID; } set { weblogMessageID = value; } } public string PhotoCategoryID { get { string result = (string)ViewState["PhotoCategoryID"]; if (result != null) return result; else return string.Empty; } set { ViewState["PhotoCategoryID"] = value; } } private string photoMessageID; // Set this member before requesting to display photo message public string PhotoMessageID { get { return photoMessageID; } set { photoMessageID = value; } } public void Update(eCurrentPage currentpage) { currentPage = currentpage; CreateChildControls(); } protected override void CreateChildControls() { Controls.Clear(); switch (currentPage) { case eCurrentPage.WeblogOverview : AddWeblogOverviewControls(); break; case eCurrentPage.WeblogMessage : ShowWeblogMessage(); break; case eCurrentPage.PhotoOverview : AddPhotoOverviewControls(); break; case eCurrentPage.PhotoCategory: AddPhotoCategoryControls(); break; Etc... } } |
Het grote probleem is dat bij een postback de member-variablen van de ContentFrameControll null zijn. Dit is voor zover ik lees op internet bekend gedrag, echter zou ik graag toch dit ontwerp van controls aanmaken enigzinds behouden.
Ik heb ook geprobeerd variabelen tijdens de Click eventhandler in de ViewStates op te slaan, en een Update() call in de Init fase te doen maar dat lijkt ook niet te helpen.
Zie ik iets over het hoofd of heb ik een grote ontwerp fout gemaakt?