
Mellékelt példa megnyitása előtt szükséges egy DisabledSubmit 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 Submit gombot letiltva megakadályozhatjuk, hogy ugyanaz a kérés többször is eljusson a szerverhez. Most ezeket a funkciókat egy komponensben valósítjuk meg, kiegészítve azt egy olyan property-vel, melyben megadható az a szöveg, mely a letiltott nyomógomb feliratát képezi a letiltott állapotban.
A kontrol publikus, felhasználó által megadható property-je a következő módon deklarálható. A property egy privát változó értékét állítja.
private string FText = "Kérem, várjon...";
...
[Category("Tulajdonság"), DefaultValue("Kérem, várjon...")]
public string DisabledText
{
get
{
return FText;
}
set
{
FText = value;
}
}
A kontrol konstruktora beállítja a kezdeti méreteit.
public DisabledSubmitControl()
{
Height = 25;
Width = 140;
}
A kontrol egy Button osztályú gyermekkomponenst tartalmaz. A létrehozását a CreateChildControls függvény intézi. A gomb letiltó funkcióját egy JavaScript kód valósítja meg, mely egy példányban kerül fel a Web lapra. Ennek eredményeképpen a komponensnek rendelkeznie kell egy egyedi azonosítóval, hogy több komponens Form-ra helyezésekor is tudja a JavaScript függvény, hogy melyikről van szó.
protected override void CreateChildControls()
{
subButton = new Button();
subButton.ID = "sb_" + UniqueID;
...
A letiltást megvalósító funkció a gomb onClick eseményekor lefutó SubmitFrom függvényben van implementálva. A függvény paraméterként a gomb azonosítóját kapja meg. Hogy ez megvalósuljon a gomb objektumhoz egy attribútumot kell adnunk.
subButton.Attributes.Add("onclick","SubmitForm(sb_"+ UniqueID+")");
Controls.Add(subButton);
}
A kontrol OnInit függvényében pedig elkészítjük a SubmitForm JavaScript függvényt.
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (Page != null)
{
StringBuilder sb = new StringBuilder();
sb.Append("<script language=\"javascript\">\n");
sb.Append("function SubmitForm(obj)\n");
sb.Append("{\n");
A kontrol létrehozott DisabledText property-je ekkorra már beállítja a FText nevű privát változót, így az bekerülhet a JavaScript függvény kódjába.
...
sb.Append(" obj.value = '" + FText + "';\n");
sb.Append(" obj.disabled = true;\n");
sb.Append(" document.forms[0].submit();\n");
A script szövegét lezárva a RegisterClientScriptBlock függvény hívásával helyezzük el azt a web oldalon.
sb.Append("}\n");
sb.Append("</script>");
Page.RegisterClientScriptBlock("sub",sb.ToString());
E függvény első paramétereként egy tetszőleges azonosítót adunk, másodikként pedig a script szövegét. A függvény biztosítja azt, hogy több kontrol használata esetén is csak egy példányban kerüljön a web lapra a script. Teszi ezt úgy, hogy ellenőrzi, hogy az itt első paraméterként megadott azonosító létezik-e már vagy még sem.
A project fordítása után a kontrol kész. Felhasználása előtt a kontrolt fel kell tenni a ToolBox-ra a szokásos módon: kattintsunk a ToolBox valamely lapján az egér jobb gombjával, majd a megjelenő menüből válasszuk ki a Customize ToolBox pontot, a megjelenő ablakban a .NET Frameworks Components fület. A Browse gombbal keressük elő az imént létrehozott .DLL-t.
A példa alkalmazás egy általunk készített kontrolt tartalmaz, melyre rákattintva elindul egy kérés a szerver felé, majd visszatérve üdvözli a felhasználót a TextBox komponensbe beírt szövegnek megfelelően. A gomb megnyomása és az üdvözlőszöveg megjelenéséig természetesen a gomb le van tiltva.