Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#/ASP.NET] Lege waarden CustomControl na Postback

Pagina: 1
Acties:

  • Odin
  • Registratie: November 2002
  • Laatst online: 30-07 10:54

Odin

¯¯¯¯¯

Topicstarter
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:

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?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:49

gorgi_19

Kruimeltjes zijn weer op :9

Door de update method aan te roepen in je postback voeg je wederom controls toe aan de controlcollection. Waarom wil je twee keer dezelfde controls toevoegen?

Aangezien dynamische controls lastig kunnen zijn, is het wellicht een idee om bij het click-event een redirect te doen met een unieke pageId en deze uit te lezen tijdens de init. Zo heb je geen postback nodig om je controlcollection op orde te brengen en wordt het geheel iets eenvoudiger.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Odin
  • Registratie: November 2002
  • Laatst online: 30-07 10:54

Odin

¯¯¯¯¯

Topicstarter
Bedankt voor je reactie.

Controls worden elke update gecleared, dus ik ik vervang Controls en voeg ze niet toe :)

Normale navigatie werkt prima. Echter, de postback die veroorzaakt wordt door het klikken op de Back-button in een browser zorgt voor de problemen. Als ik vanaf de hoofdpagina doorklik werkt alles naar behoren.