VIII 10 2010

Device Filters v ASP.NET

= Device Filters in ASP.NET

 ASP.NET podporuje "elegantní" zápis pro nastavení vlastností controlů a direktiv dle používaného prohlížeče.


<asp:Label IE:Text="Používáte Internet Explorer" Mozilla:Text="Používáte Firefox" PIE:Text="Používáte Pocket IE" Text="Používáte Buchvíco" runat="server" />

 

X 19 2009

Programová změna souboru web.config

= programmatically change web.config

Dnes jsem narazil na nutnost programové změny položek v konfiguračním souboru web.config.

Příklad ukáži na změně v sekci customError. Ukázkový konfigurační soubor je:

   1:  <authenticationmode="Windows" />
   2:          <!--
   3:              The <customErrors> section enables configuration
   4:              of what to do if/when an unhandled error occurs
   5:              during the execution of a request. Specifically,
   6:              it enables developers to configure html error pages
   7:              to be displayed in place of a error stack trace. -->
   8:   
   9:          <customErrorsmode="RemoteOnly" 
  10:              defaultRedirect="GenericErrorPage.htm">
  11:              <errorstatusCode="403"redirect="NoAccess.htm" />
  12:              <errorstatusCode="404"redirect="FileNotFound.htm" />
  13:          </customErrors>
  14:   
  15:      </system.web>

Programově lze poté hodnoty této sekce změnit následujícím způsobem:

   1:  // nacteni sekce
   2:  Configuration configuration = 
   3:       WebConfigurationManager.OpenWebConfiguration("~");
   4:  CustomErrorsSection section = 
   5:       (CustomErrorsSection)configuration.GetSection("system.web/customErrors");
   6:   
   7:  // zmena hodnoty polozky sekce
   8:  section.DefaultRedirect = "SomePage.htm";
   9:   
  10:  //ulozeni konfigurace
  11:  configuration.Save();
VI 16 2009

Návrat na pozici uživatele po PostBacku

= return the user to the same position in the client browser after postback

Někdy je potřeba, aby po vyvolání poustbacku na stránce, se po jeho vykonání stránka vrátila na stejnou pozici, kde byla před postbackem. Jedná se zejména o delší stránky, které je potřeba např. k tlačítku odskrolovat.

Asp.net samo po postbacku přenačte stránku a vrátí se na její začátek. Tudíž uživatel musí znovu skrolovat na poslední pozici, což jej určitě nepotěší.

Řešení se nabízí několik. Z čitého html se nabízí využití záložek (kotev), kdy se na místo, kam má být proveden odskok, vloží definice záložky

<a href="jmeno_zalozky"></a>

a následně je možné se na tuto záložku přesměrovat

<a href="#jmeno_zalozky>na záložku</a>
<a href="stranka.html#jmeno_zalozky>na záložku</a>
<a href="http://www.nejakyweb.cz/default.aspx#jmeno_zalozky>na záložku</a>

Využití záložek ale má i své nevýhody. Lze se odkázat jen na místa, kde je záložka definována, takže stejně uživateli bude stránka odskakovat. A dále pro přechod na záložku je třeba provést přesměrování, takže provádí-li se v postbacku kód, který mění obsah stránky, tato změna se tím ztratí.

Druhá možnost je využití direktivy, kterou nabízí přímo ASP.Net v objektu @Page. Jedná se o direktivu MaintainScrollPositionOnPostback, která pokud je nastavena na hodnotu true, ASP.Net automaticky po postbacku přesune stránku na pozici, kde byla před vyvoláním postbacku. Defaultně je však tato vlastnost nastavena na hodnotu false a proto je po postbacku stránka zobrazena na začátku.

Někdy je potřeba tuto direktivu nastavit ne pro několik konkrétních stránek, ale pro všechny stránky. To je možné, stačí nastavit hodnotu direktivy v konfiguračním souboru web.config v sekci <pages>.

Ovšem nic není tak krásné, jak vypadá. Užití direktivy může vést i k nečekaným výsledkům, kdy dochází k různým odskokům stránky či se stránka vůbec neposune na poslední pozici. Také je nutné mít zapnutou podporu javascriptu, protože odskoky řeší právě skript na straně klienta.

Bližší informace k direktivámpro @Page lze najít na MSDN.

III 26 2009

Nastavení jazyka u prvků AjaxControlToolkit

= Set language for control Calendar in AjaxControlToolkit

Jestliže se chystáte využít ve svých webových stránkách prvky z rozšíření AjaxControlToolkit, které rozšiřují webovou stránku o javascriptové prvky komunikující na úrovni ajaxu se serverem, může se hodit návod na nastavení národní kultury.

Způsobů je několik, já zde popíši dva, které se liší jen částečně. Oba totiž vyžadují povolení globalizace skriptu u ovládacího prvku ScriptManager jak je vidět v následující ukázce kódu:

   1: <asp:ScriptManager ID="ScriptManager1" runat="server" 
   2:     EnableScriptGlobalization="true"  />

Vlastní nastavení kultury je možné nastavit buď na každé stránce zvlášť nebo globálně prostřednictvím sekce v souboru Web.Config.

Pokud tedy chceme nastavit kulturu pro jednotlivé stránky zvlášť, doplníme do hlavičky stránky tagu @Page následující parametry pro nastavení např. české kultury:

   1: <%@ Page Language="C#"  UICulture="cs" Culture="cs-CZ" ...

Jestliže chceme nastavit kulturu pro celou aplikaci globálně, vložíme do souboru Web.Config do sekce <system.web> následující novou sekci:

   1: <globalization uiCulture="cs" culture="cs-CZ" />

Tím máme hotovo.

II 25 2009

Rozšíření Anketa pro BlogEngine.Net

= New module for the BlogEngine.Net bloging system - Poll

Aktualizace (28.2.2009)

V rámci soutěže vyhlášené Microsoftem (Soutěž: Udělejte si blog forum nebo wiki, dostanete triko a možná i počítač) jsem se rozhodl vytvořit rozšíření implementující anketu.

První pokus, který jsem sepsal během včerejšího večera, je spíše návrh čekající na nápady či připomínky :). Momentálně je možné vytvořit anketu s možností výběru z 10 odpovědí, přičemž průběh hlasování se zobrazuje jak číselně (počet hlasů k položce), tak i pokus o grafický vzhled. Dále je prováděna kontrola hlasování, tj. z každé IP adresy je možné hlasovat pro danou anketu jen jednou. Toto řešení by chtělo ještě časem vylepšit, jelikož jeden hlasující znepřístupní hlasování ostatním uživatelům schovaným za jednou IP adresou.

V rámci aktualizace a úprav bylo hlasování upraveno tak, že hlasování je voláno pomocí AJAXu a není již třeba reload celé stránky. Také byla opravena možná chyba při současném hlasování několikauživatelů najednou. Nyní je zápis do souboru řízen prostřednictvím zámků.

Administrace ankety je řešena standardně dle návrhu aplikace viz následující obrázek:

anketaEdit

Vlastní anketa může mít následující vzhled:

anketa     anketa2

 

Instalace

Pro instalaci rozšíření Anketa stačí upravit jazykové soubory, případně je přehrát, a přidat do nich jazykové nastavení pro anketu. Dále je třeba v projektu přidat složku do složky widgets s názvem Poll. Do této složky nahrát zdrojové soubory (edit.aspx, edit.aspx.cs, widget.aspx, widget.aspx.cs, Poll.js, PollCallBack.aspx a PollCallBack.aspx.cs) rozšíření. Poslední soubor, který je třeba přehrát je třída PollHelper.cs, kterou je třeba nahrát do složky App_Code a v ní do složky Controls.

Jakmile jsou soubory zdrojů a zdrojové aplikace nahrány a přidány do projektu, stačí celý projekt zkompilovat a uložit na server. Rozšíření se automaticky přidá do nabídky a je připraveno k použití.

Zdrojové soubory je možné stáhnout zde.

PS: za jakékoli náměty či připomínky budu rád, pište je prosím do komentářů