Dnes něco naprosto oddechového a jednoduchého. Celé to spočívá v tom že do aspx vložím jeden html tag:
<p class="chyba" id="errors" runat="server" visible="false" enableviewstate="false">
<p></p>který vůbec nebude ve výsledném kódu díky tomu že je Visible=”false” a nebude se zobrazovat stejný ani pokud uživatel obnoví(reloaduje) stránku(EnableViewState=”false”).
Dále vytvořím třídu SunamoPage, od které budu odvozovat třídu Page webu(třeba GgdagPage) a od GgdagPage odvodím každou aspx stránku ve webové aplikaci. A ve třídě SunamoPage mám vytvořeny tyto proměnné a události:
protected HtmlGenericControl errors = null;
protected event VoidVoid ErrorEvent;
protected event VoidVoid WarningEvent;
protected event VoidVoid SuccessEvent;Pak tam mám definované metody které pracují s tagem s ID errors a případně vyvolávají tu správnou událost. Vypadají takhle:
/// <summary>
/// Toto se bude vypisovat jen při nejvážnějších chybách, kdy uživatele chci na něco důrazně upozornit. Mělo by to uživatele trknout aby to už dále nezkoušel. Také zde volám událost ErrorEvent takže v jejím handleru mohu dát kód kde třeba něco napíšu 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 používat při většině typů chyb - ať už při nenalezení něčeho v DB nebo když se něco nepodaří napr. uložit.
/// </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 používat pouze když uživatel vkročí na stránku, abych mu sdělil nějakou 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 používat při úspěchu 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 stránce odvozené od GgdagPage mám pak přiřazení do rodičovské třídy prvku errors(jmenují se stejně, aby když náhodou zapomenu na 1. krok aby mě to ihned na začátku vyhodilo výjimku NullReferenceException) a případné napojení na handlery událostí, které se mi vytvoří sami, když napíšu “plus” + tab.
base.errors = errors;
ErrorEvent += new VoidVoid(EditCat_ErrorEvent);Do samotného handleru pak mohu dát třeba co se má stát po chybě (co se má skrýt atd.):
void EditCat_ErrorEvent()
{
registerFieldsCat.Visible = false;
}Samozřejmě nezapomenu vložit css styly, které nalinkuji do MasterPage.master(případně *.master)
/* Pozadí nesmí být nikdy tmavé, protože
jinak to nevypadá 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;
}Výsledek vypadá asi nějak takto(jako pozadí stránky je ideálně bílá nebo světlé barvy s nízkou sytostí a popř. vysokým jasem):
