
Mellékelt példa megnyitása előtt szükséges egy HiddenField nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappa Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A projekt lefordítása után a ToolBox-ra felvehető egy HiddenFieldControl nevű kontrol.
A HiddenFieldControl kontrol elkészítésénél felülírjuk annak OnPreRender nevű függvényét, mely akkor lesz meghívva, mielőtt a kontrol HTML kódja előállításra kerül, vagyis annak Render függvénye lefut.
Itt a Page osztály RegisterHiddenField függvényét meghívva előállíthatunk egy rejtett mezőt a web oldalon, mely kontrolunkhoz tartozik. Ennek első paraméterében a rejtett mező nevét kell megadnunk, másodikként annak értékét. A név kialakítását a következőképpen végezzük el: a nevet két aláhúzás karakterrel kezdjük, majd ezt követi a kontrol egyedi azonosítója, végül a _Ticks szöveg. A kontrol egyedi azonosítóját a ClientID property-ből tudhatjuk meg. Ez az azonosító a következő módon jön létre: ha a kontrolunk osztályának neve HiddenFieldControl és ebből felhelyezünk egyet a web oldalra, akkor az automatikusan generált név HiddenFieldControl1 lesz, amíg ezt a nevet meg nem változtatjuk. Ha egynél több kontrolt helyezünk el a web lapon, akkor az egyes sorszám automatikusan növekszik.
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (Page!=null)
{
Page.RegisterHiddenField("__" + ClientID + "_Ticks", DateTime.Now.Ticks.ToString());
}
}
Fenti kód lefutása az alábbi HTML kódot eredményezi:
<input type="hidden" name="__HiddenFieldControl1_Ticks" value="631704560661718750" />
Most már csak azt kell megvizsgálnunk, hogy a web oldalon elhelyezett rejtett mezőben tárolt értéket miként tudjuk kiolvasni programból. Erre a Page osztály Load eseményénél kerül sor. A web lap Form-ján több rejtett mező is lehet (pl.: __VIEWSTATE). Ezért egy ciklus segítségével meg kell keresnünk azokat a rejtett mezőket, melyeket a mi kontrolunk példányai hoznak létre. Ezeket az adatokat a Request osztály Form kollekcióján keresztül érhetjük el. Egy for ciklus segítségével végigmegyünk ezen a kollekción és megvizsgáljuk az összes elemét.
private void Page_Load(object sender, System.EventArgs e)
{
for (int i=0; i<Request.Form.Count; i++)
{
Ha találunk egy olyan rejtett mezőt, mely tartalmazza a Ticks szöveget, akkor megjelenítjük a hozzátartozó értéket egy ListBox-ba.
if (Request.Form.Keys[i].IndexOf("Ticks")!=-1)
{
ListBox1.Items.Add(Request.Form.Keys[i].ToString() + ": " + Request.Form[i].ToString());
}
}
}