Ik ben bezig met een groot asp.net project in c#. Projecten kunnen worden aangemaakt in een wizard en per pagina in de wizard worden er dingen toegevoegd aan het project.
Op een gegeven moment wordt er aan de hand van de keuze van de gebruiker een pagina met allemaal controls dynamisch geladen vanuit de OnInit zodat er postbacks plaats kunnen vinden.
Bij die OnInit moet ik wel weer het project kunnen laden zodat ik weet welke controls er aangemaakt moeten worden. In de OnInit kan ik nog geen ViewStates gebruiken jammer genoeg, dus ik moest op zoek naar een alternatief.
Zonder ViewStates moet ik dus het ID van het project tussen postbacks blijven posten. Hiervoor heb ik een Hidden Input aangemaakt die ik op een gegeven moment na het doorlopen van mijn eerste wizard step het ID van het nieuwe project geef. In zie dan ook in de source dat deze input de juiste value heeft gekregen. Na de volgende postback krijg ik echter deze waarde niet terug als ik hem via FindControl of Request.Form ophaal.
Ik heb al wat getest met inputs die wel of geen runat="server" hebben. Ook dynamisch aanmaken door het aanmaken van een HtmlHiddenInput en die te plaatsen op de pagina heeft geen effect.
Van diverse pagina's waar ik op heb gegoogled begrijp ik dat bovenstaande toch echt mogelijk moet zijn dus blijkbaar mis ik ergens wat.
Een optie is ook nog om querystrings te gaan gebruiken, maar eigenlijk wil ik dat voorkomen.
Heeft iemand een idee hoe ik dit moet doen?
OnInit:
Wizard1_ActiveStepChanged:
Op een gegeven moment wordt er aan de hand van de keuze van de gebruiker een pagina met allemaal controls dynamisch geladen vanuit de OnInit zodat er postbacks plaats kunnen vinden.
Bij die OnInit moet ik wel weer het project kunnen laden zodat ik weet welke controls er aangemaakt moeten worden. In de OnInit kan ik nog geen ViewStates gebruiken jammer genoeg, dus ik moest op zoek naar een alternatief.
Zonder ViewStates moet ik dus het ID van het project tussen postbacks blijven posten. Hiervoor heb ik een Hidden Input aangemaakt die ik op een gegeven moment na het doorlopen van mijn eerste wizard step het ID van het nieuwe project geef. In zie dan ook in de source dat deze input de juiste value heeft gekregen. Na de volgende postback krijg ik echter deze waarde niet terug als ik hem via FindControl of Request.Form ophaal.
Ik heb al wat getest met inputs die wel of geen runat="server" hebben. Ook dynamisch aanmaken door het aanmaken van een HtmlHiddenInput en die te plaatsen op de pagina heeft geen effect.
Van diverse pagina's waar ik op heb gegoogled begrijp ik dat bovenstaande toch echt mogelijk moet zijn dus blijkbaar mis ik ergens wat.
Een optie is ook nog om querystrings te gaan gebruiken, maar eigenlijk wil ik dat voorkomen.
Heeft iemand een idee hoe ik dit moet doen?
OnInit:
code:
1
2
3
4
5
6
7
8
9
10
11
| if (Request.Form["ProjectID"] != null) { int HiddenProjectID = Convert.ToInt32(Request.Form["ProjectID"]); Project = new Project(HiddenProjectID); Project.Load(); } else { HtmlInputHidden HiddenProjectID = new HtmlInputHidden(); HiddenProjectID.ID = "ProjectID"; this.Controls.Add(HiddenProjectID); Project = new Project(); } |
Wizard1_ActiveStepChanged:
code:
1
2
3
| Project.Save(); //doet een insert en zorgt ervoor dat het nieuwe ID geset wordt. HtmlInputHidden HiddenProjectID = (HtmlInputHidden)Page.FindControl("ProjectID"); HiddenProjectID.Value = Project.ID.ToString(); |