Ik ben bezig om in asp.net een custom control te maken. In dat control wil ik een Hidden field hebben die ik met client side script aan kan passen zodat ik daar later serverside weer wat mee kan doen. Mijn probleem is dat ik bij een postback de data van mijn hidden field kwijt ben.
Ik heb even een TestControl gemaakt die ziet er als volgt uit
Ik maak hier dus in mijn CreateChildeControls methode een HtmlInputHidden aan en voeg die toe aan de Control collection van mijn Custom Control.
In mijn Test.aspx heb ik dan een MyTestControl toegevoegd op de volgende manier
met natuurlijk bovenaan de juiste Register TagPrefix.
In mijn codebehind heb ik dan in mijn PageLoad eventhandler de volgende code staan
Dit werkt allemaal correct. Als ik mijn pagina voor de eeste keer laad en ik kijk in de html source dan zie ik netjes staan
Dus de value is goed gezet. Als ik echter op de submit knop druk dan kan ik daarna nergens in mijn code de value van mijn input terug krijgen en in de html source staat dan ook
Hoe komt het dat de value van mijn hidden box verdwijnt. Als ik hetzelfde doe alleen dan in mijn Page zelf. Dus in mijn CreateChildControls methode een hidden box toevoeg en die alleen bij de eerste page load een value geef dan wordt die value wel weer correct gezet bij een postback.
Ik zal wel iets simpels over het hoofd zien maar ik zie zo snel even niet wat.
Ik heb even een TestControl gemaakt die ziet er als volgt uit
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| public class MyTestControl : System.Web.UI.Control { public MyTestControl() { this.EnableViewState = true; } protected override void CreateChildControls() { base.CreateChildControls (); HtmlInputHidden hidden = new HtmlInputHidden(); Controls.Add( hidden ); } public void SetHiddenData( string data ) { this.EnsureChildControls(); ((HtmlInputHidden)Controls[ 0 ]).Value = data; } } |
Ik maak hier dus in mijn CreateChildeControls methode een HtmlInputHidden aan en voeg die toe aan de Control collection van mijn Custom Control.
In mijn Test.aspx heb ik dan een MyTestControl toegevoegd op de volgende manier
ASP.NET:
1
2
| <Test:MyTestControl id="myTest" runat="server" /> <input type='submit' value='Test' /> |
met natuurlijk bovenaan de juiste Register TagPrefix.
In mijn codebehind heb ik dan in mijn PageLoad eventhandler de volgende code staan
C#:
1
2
3
4
| if( !Page.IsPostBack ) { myTest.SetHiddenData( "Test" ); } |
Dit werkt allemaal correct. Als ik mijn pagina voor de eeste keer laad en ik kijk in de html source dan zie ik netjes staan
HTML:
1
| <input name="_ctl0" type="hidden" value="Test" /> |
Dus de value is goed gezet. Als ik echter op de submit knop druk dan kan ik daarna nergens in mijn code de value van mijn input terug krijgen en in de html source staat dan ook
HTML:
1
| <input name="_ctl0" type="hidden" /> |
Hoe komt het dat de value van mijn hidden box verdwijnt. Als ik hetzelfde doe alleen dan in mijn Page zelf. Dus in mijn CreateChildControls methode een hidden box toevoeg en die alleen bij de eerste page load een value geef dan wordt die value wel weer correct gezet bij een postback.
Ik zal wel iets simpels over het hoofd zien maar ik zie zo snel even niet wat.
“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”