III 05 2010

Zapamatování pozice v divu při přenačtení stránky

= Remember a Div's Scroll Position

Je-li na stránce div s nastavenou vlastností stylu Overflow tak, aby byl obsah bloku div rolovatelný, nastává problém při přenačtení stránky vlivem události na stránce. Po tomto přenačtení se obsah bloku div vždy zobrazí na začátku.

V bloku Erica Pascarello jsem našel způsob, jak si div zapamatuje svojí pozici po její změně a při načtení stránky ji nastaví. Příklad zdrojového kódu ze stránek autora je níže.

<html>
  <head>
    <title>Fun Scroll</title>
    <style type="text/css">
      #divTest{width:150px;height:200px;overflow:auto}
    </style>
    <script type="text/javascript">
      window.onload = function(){
        var strCook = document.cookie;
        if(strCook.indexOf("!~")!=0){
          var intS = strCook.indexOf("!~");
          var intE = strCook.indexOf("~!");
          var strPos = strCook.substring(intS+2,intE);
          document.getElementById("divTest").scrollTop = strPos;
        }
      }
      function SetDivPosition(){
        var intY = document.getElementById("divTest").scrollTop;
        document.title = intY;
        document.cookie = "yPos=!~" + intY + "~!";
      }
    </script>
  </head>
  <body>
    <div id="divTest" onscroll="SetDivPosition()">
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      ERIC<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
      1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
    </div>
  </body>
</html>

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
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();

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
VII 24 2009

Otevření souboru v přiřazené aplikace

= Open file in default application

Je-li potřeba otevřít soubor v aplikace, ke které je defaultně přiřazen, lze využít následující konstrukci:

   1: System.Diagnostics.Process.Start(@"C:\poznámky.docx");

kde parametr v závorce je cesta k otevíranému souboru.

Někdy je třeba blíže specifikovat nastavení spouštěné aplikace, např. když ji chceme pouštět maximalizovanou. Toho lze docílit následujícím způsobem:

   1: System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo();
   2:  
   3: PSI.FileName = @"C:\poznámky.docx";
   4: PSI.WindowStyle = System.Diagnostics.ProcessWindowStyle.Maximized;
   5:  
   6: System.Diagnostics.Process.Start(PSI);

kde vlastnost FileName je cesta k otevíranému souboru a vlastnost WindowStyle jsou parametry, s jakými má dojít ke spuštění defaultní aplikace.

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
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.

Aktuální hodnocení: 4.0 Počet hodnocení: 2

  • Currently 4/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
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)

Ohodnoť příspěvek jako první

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5