Dnes neco naprosto oddechoveho a jednoducheho. Cele to spociva v tom ze do aspx vlozim jeden html tag:
1 |
<p class="chyba" id="errors" runat="server" visible="false" enableviewstate="false"> <p> </p> |
ktery vubec nebude ve vyslednem kodu diky tomu ze je Visible=”false” a nebude se zobrazovat stejny ani pokud uzivatel obnovi(reloaduje) stranku(EnableViewState=”false”).
Dale vytvorim tridu SunamoPage, od ktere budu odvozovat tridu Page webu(treba GgdagPage) a od GgdagPage odvodim kazdou aspx stranku ve webove aplikaci. A ve tride SunamoPage mam vytvoreny tyto promenne a udalosti:
1 2 3 4 |
protected HtmlGenericControl errors = null; protected event VoidVoid ErrorEvent; protected event VoidVoid WarningEvent; protected event VoidVoid SuccessEvent; |
Pak tam mam definovane metody ktere pracuji s tagem s ID errors a pripadne vyvolavaji tu spravnou udalost. Vypadaji takhle:
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 56 57 58 59 60 61 62 63 64 65 66 |
/// <summary> /// Toto se bude vypisovat jen pri nejvaznejsich chybach, kdy uzivatele chci na neco durazne upozornit. Melo by to uzivatele trknout aby to uz dale nezkousel. Take zde volam udalost ErrorEvent takze v jejim handleru mohu dat kod kde treba neco napisu do EventLogu, bude li existovat. /// </summary> /// <param name="message"> protected void Error(string message) { errors.Visible = true; errors.InnerHtml = message; errors.Attributes.Remove("class"); errors.Attributes.Add("class", "error"); if (ErrorEvent != null) { ErrorEvent(); } } /// <summary> /// Toto se bude pouzivat pri vetsine typu chyb - at uz pri nenalezeni neceho v DB nebo kdyz se neco nepodari napr. ulozit. /// </summary> /// <param name="message"> protected void Warning(string message) { errors.Visible = true; errors.InnerHtml = message; errors.Attributes.Remove("class"); errors.Attributes.Add("class", "warning"); if (WarningEvent != null) { WarningEvent(); } } /// <summary> /// Toto se bude pouzivat pouze kdyz uzivatel vkroci na stranku, abych mu sdelil nejakou informaci. /// </summary> /// <param name="message"> protected void Info(string message) { errors.Visible = true; errors.InnerHtml = message; errors.Attributes.Remove("class"); errors.Attributes.Add("class", "info"); } /// <summary> /// Toto se bude pouzivat pri uspechu operace. /// </summary> /// <param name="message"> protected void Success(string message) { errors.Visible = true; errors.InnerHtml = message; errors.Attributes.Remove("class"); errors.Attributes.Add("class", "success"); if (SuccessEvent != null) { SuccessEvent(); } } |
Ve strance odvozene od GgdagPage mam pak prirazeni do rodicovske tridy prvku errors(jmenuji se stejne, aby kdyz nahodou zapomenu na 1. krok aby me to ihned na zacatku vyhodilo vyjimku NullReferenceException) a pripadne napojeni na handlery udalosti, ktere se mi vytvori sami, kdyz napisu “plus” + tab.
1 2 |
base.errors = errors; ErrorEvent += new VoidVoid(EditCat_ErrorEvent); |
Do samotneho handleru pak mohu dat treba co se ma stat po chybe (co se ma skryt atd.):
1 2 3 4 5 |
void EditCat_ErrorEvent() { registerFieldsCat.Visible = false; } |
Samozrejme nezapomenu vlozit css styly, ktere nalinkuji do MasterPage.master(pripadne *.master)
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 |
/* Pozadi nesmi byt nikdy tmave, protoze jinak to nevypada hezky. */ #errors { background-color: White; border: 1px solid Lime; padding: 5px 10px 5px 10px; } .success { color: Lime; } .error { color: Red; } .warning { color: Orange; } .info { color: Black; } |
Vysledek vypada asi nejak takto(jako pozadi stranky je idealne bila nebo svetle barvy s nizkou sytosti a popr. vysokym jasem):