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.

IV 25 2009

Tisk ve formátu XPS

= Print in XPS format

Tento příspěvek beru spíše jako velmi lehkou poznámku k tisku ve formátu XPS.

Pro práci s formátem XPS je třeba zvolit .NET Framework verze 3.0 a vyšší a mít v projektu nareferencované následující knihovny:

  • PresentationCode
  • PresentationFramework
  • ReachFramework
  • WindowsBase
  • System.Printing

Ukázka práce s XPS je vidět v přiložené knihovně, který vytiskne vzorový text a obrazec na zvolených pozicích.

XpsExample.zip (17,03 kb)

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.

III 12 2009

Odesílání e-mailu - smtp.seznam.cz

Dle nastavení na odeslání e-mailu popsaném na stránkách nápovědy Seznamu je nastavení smtp serveru pro odeslání smtp.seznam.cz (77.75.72.43). Nastavením poštovního klienta (Mozilla Thunderbird, MS Outlook, ...) odesílání funguje. Problém nastává, chcete-li odesílat e-mail např. z Vámi napsané aplikace v jazycích .NET. Odeslání se totiž nezdaří.

Řešení je na můj vkus značně zvláštní. Nenašel jsem způsob, jak přinut aplikaci (konkrétně tento blog - BlogEngine.Net), aby odeslala e-mail prostřednictvím smtp serveru Seznamu. Ale zpátky k řešení: je třeba nastavit jiný server Seznamu, konkrétně se jedná o server mx1.seznam.cz (77.75.72.42). Tento server má jinou IP adresu, ale port a přihlašování je již standardní jako pro smtp server Seznamu, tj. port 25, a vše funguje, jak má. E-maily se posílají :-).

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ářů