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" />

 

VIII 10 2010

Extension metody v jazyce C#

= Extension Methods

Jazyk C# od .NET Frameworku 3.0 umožňuje rozšířit metody nad objektem o takzvané Extension Methods, což jsou metody, které rozšiřují funkcionalitu objektu bez zásahu do kódu objektu.

Ukázkou takové metody může být například metoda, která vrací příznak, zda je hodnota libovolného objektu rovna hodnotě null či nikoliv.

namespace System
{
   public static class ObjectExtensions
   {
      public static bool IsNull(this object o)
      {
         return o == null;
      }
   }
}

if (!myObject.IsNull())
{ … }

 

Extension metoda musí být statická, umístěna ve statické třídě a musí obsahovat první parametr uvozený klíčovým slovem this. Jakmile jsou tyto podmínky splněny, bude daná metoda zobrazena u všech objektů, které odpovídají prvním parametru metody, pokud danou statickou třídu vidí, tj. implementují její namespace.

Příkladem použití Extension Methods jsou například metody používané v LINQu.

Další extension metody je možné nalézt na následující adrese: http://www.extensionmethod.net/Default.aspx .

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>
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();
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.