4. Ukázka ASP.NET

Dnes stalé víc a víc výrobců programuje webové aplikace i když jsou určeny pro použití pouze na osobních počítačích. Jejich výhodou je, že jsou postaveny na standardních protokolech jako je HTTP, HTML, XML a podobně. Další velkou výhodou je uživatelské rozhraní. Programátor může využít standardní internetový prohlížeč. V prostředí .NET je podpora webových aplikací realizovaná technologií ASP.NET. Oblastí, kde se tato technologie protíná s jazykem C# jsou webové formuláře.Jde o programový model, ve kterém jsou stránky (obsahující webové formuláře) generovány na straně serveru a v podobě čistého HTML dodávány klientovi(prohlížeči). Proces vytváření takovéto stránky lze takto shrnout.

  • Nejprve vytvoříme HTML stránku, ta bude obsahovat všechny statické prvky.

  • Pak doplníme program v jazyce C#. Tento program bude generovat dynamický obsah.

  • Program se spustí na straně serveru a výsledek jeho činnosti bude integrován do statického HTLM.

  • Výsledná HTML stránka je poslána prohlížeči klienta.

Webové formuláře rozdělují uživatelské rozhraní na dvě části: vizuální komponenty,také nazývané uživatelské rozhraní(user interface-UI) a logiku, která je skryta za těmito vizuálními prvky. Podpora webových formulářů je integrovana ve vývojovém prostředí Visual Studio.NET. Autoři tohoto vývojového prostředí implementovali technologii Rapid Application Development (RAD). Tato technologie si klade za cíl zjednodušit vývoj webové aplikace. Programátor jednoduše "nakliká" stránku a pak už jen implementuje logiku této stránky a právě tuto logiku budeme vytvářet v jazyce C#.

Architektura webových formulářů je postavena na událostech. Události jsou generovány ve chvíli kdy uživatel stiskne tlačítko, vybere položku v menu nebo jinak využije možnosti, které mu poskytuje uživatelské rozhraní. Další události také může generovat systém. Právě obsluha těchto událostí tvoří logiku webového formuláře. ASP.NET používá dva typy událostí:

  • Postback události jsou ty, které způsobí, že se daný formulář ihned odešle zpět na server;

  • Non-postback události jsou naproti tomu kontrolní jednotku uloženy a zpracovány až ve chvíli, kdy je provedena nějaká postback událost.

Prostředí Internetu a webových aplikací je bezestavové. ASP.NET ale poskytuje jistý mechanismus, který definuje stav uživatele. Tento stav je uložen ve vnitřní proměnné ViewState a předáván ve skryté položce formuláře.

4.1. Vytvoření webového formuláře

Podpora webových formulářů je integrovaná ve Visual Studiu. Jako v jiných případech lze aplikace vytvářet i jinak, ale tvorba webových formulářů je takto mnohem jednodušší.Vytvoříme-li projekt ASP.NET Web From s názvem HelloWeb je vygenerovaná následující kostra.

  • HelloWeb.aspx - soubor s užvatelským rozhraním.

    [ukázka kódu]
    <%@ Page language="c#"
      Codebehind="HelloWeb.aspx.cs"
      AutoEventWireup="false"
      Inherits="ProgrammingCSharpWeb.HelloWeb" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <html>
      <head>
        <title>HelloWeb</title>
        <meta name="GENERATOR"
          Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema"
          content="http://schemas.microsoft.com/intellisense/ie5">
      </head>
      <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
        </form>
      </body>
    </html>
  • HelloWeb.aspx.cs - soubor se zdrojovými kódy. Ty implementují logiku, která je skryta za danou stránkou.

    [ukázka kódu]
    public class HelloWeb : System.Web.UI.Page
    {
      ...
    }

Tuto kostru lze jednoduše rozšiřovat. Nejjednodušší variantou je vpisovat kód do souboru HelloWeb.aspx. Do tohoto souboru lze umisťovat budě HTML kód, nebo vpisovat kód v jazyce C#. Tyto možnosti demonstruje následující příklad:

[ukázka kódu]
Hello world! It is now <%= DateTime.Now.ToString() %>

Nejzajímavější možností jak rozšiřovat webové formuláře je přidávání ovládacích prvků. To mohu být tlačítka, textová pole a podobně. V prostředí ASP.NET existují dva typy ovládacích prvků.

  • HTML Web Controls (server-side HTML controls) - Toto jsou standardní ovládací prvky HTML fromulářů doplněné o atribut runat="Server".

    <input type="button">
  • ASP.NET Web Controls

    • Byly navrženy, aby v prostředí ASP.NET nahradily stávající ovládací prvky jazyka HTML.

    • Ovládací prvky jazyka ASP poskytují mnohem konzistnější objektový model a jména atribut.

    • Tyto ovládací prvky jsou pak ve skutečnosti realizovány pomocí standardních HTML značek.

    <asp:Button>

Použití tchto prostředků demonstruje následující příklad. Vygenerovanou kostru příkladu HelloWeb jsme rozšířili o tlačítko a textové políčko.

  • HelloWeb.aspx - soubor s užvatelským rozhraním.

    [ukázka kódu]
    <%@ Page language="c#"
      Codebehind="HelloWeb.aspx.cs"
      AutoEventWireup="false"
      Inherits="ProgrammingCSharpWeb.HelloWeb" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <html>
      <head>
        <title>HelloWeb</title>
        <meta name="GENERATOR"
          Content="Microsoft Visual Studio 7.0">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema"
          content="http://schemas.microsoft.com/intellisense/ie5">
      </head>
      <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
          <asp:TextBox id="SomeTextBox"
            style="Z-INDEX: 107; LEFT: 128px; POSITION: absolute; TOP: 64px"
            runat="server"></asp:TextBox>
          <asp:Button id="SomeButton"
            style="Z-INDEX: 105; LEFT: 20px; POSITION: absolute; TOP: 197px"
            runat="server" Text="Button"></asp:Button>
        </form>
      </body>
    </html>
  • HelloWeb.aspx.cs

    [ukázka kódu]
    public class HelloWeb : System.Web.UI.Page
    {
      protected System.Web.UI.WebControls.Button SomeButton;
      protected System.Web.UI.WebControls.TextBox SomeTextBox;
      #region Web Form Designer generated code
      override protected void OnInit(EventArgs e)
      {
        //
        // CODEGEN: This call is required by
        // the ASP.NET Web Form Designer.
        //
        InitializeComponent( );
        base.OnInit(e);
      }
      /// <summary>
      /// Required method for Designer support - do not modify
      /// the contents of this method with the code editor.
      /// </summary>
      private void InitializeComponent( )
      {
        this.SomeButton.Click += new System.EventHandler(this.SomeButton_Click);
      }
      #endregion
      private void Order_Click(object sender, System.EventArgs e)
      {
        // create the message by getting
        // the values from the controls
      }
    }