r19-t.doc

(423 KB) Pobierz
Szablon dla tlumaczy

Rozdział 19.
Oddzielanie kodu od treści

W osiemnastu poprzednich rozdziałach książki przedstawionych zostało kilka sposobów na oddzielanie interfejsu użytkownika stron ASP.NET od kodu który go obsługuje (napisanego  w języku VB.NET). Przykładowo, zostały przedstawione sposoby przenoszenia kodu, który nie jest bezpośrednio związany z interfejsem użytkownika do obiektów biznesowych, dzięki czemu strony ASP.NET mogą zawierać wyłącznie kod związany z obsługą prezentacji danych. Co więcej, wszelkie polecenia SQL można zapisać w bazie danych w formie procedur zachowanych i usunąć je ze stron ASP.NET (zagadnienia te zostały omówione w rozdziale 12., pt.: „Zastosowanie zaawansowanych technik obsługi danych”). Wszelkie ustawienia i zmienne można natomiast zapisać w plikach konfiguracyjnych, takich jak web.config.

W tym rozdziale zostanie przedstawionych kilka bardziej zaawansowanych metod separacji kodu źródłowego od zawartości strony, czyli kodu kontrolującego działanie aplikacji od kodu odpowiedzialnego za prezentację danych (na przykład: elementów sterujących HTML oraz internetowych elementów sterujących). Programiści ASP.NET bardzo oczekiwali możliwości takiej separacji, gdyż dzięki nim można uprościć strony i logicznie zgrupować wykorzystywany w nich kod. Przecież strony ASP.NET służą wyłącznie do prezentacji interfejsu użytkownika, a zatem po co miałby być w nich umieszczany kod o innym przeznaczeniu?

W tym rozdziale poznamy także sposoby dostosowywania stron ASP.NET do pochodzenia użytkownika. Metody te pozwalają na modyfikację zawartości stron ASP.NET zupełnie niezależnie od wydzielonego kodu stron.

W tym rozdziale przedstawionych zostanie bardzo wiele przykładów, a zatem… zaczynajmy!

W tym rozdziale zostaną omówione następujące zagadnienia:

·         Czym jest kod obsługi formularzy?

·         Jak używać kodu obsługi przy tworzeniu stron ASP.NET.

·         W jaki sposób elementy sterujące użytkownika mogą korzystać z kodu obsługi.

·         Jak określić pochodzenie użytkownika (na podstawie używanego języka).

·         Jak określić informacje o kulturze i regionie użytkownika.

·         W jaki sposób można wydzielić ze stron ASP.NET najczęściej używane łańcuchy znaków i zapisać je w niezależnych plikach zasobów.

Potrzeba rozdzielania różnych rodzajów kodu

Być może przypominasz sobie z dyskusji przedstawionej w rozdziale 2., że ASP.NET stara się uprościć życie programistom umożliwiając niezależne grupowanie kodu ASP.NET oraz kodu HTML. Na przykład, większość (o ile nie cały) kod ASP.NET powinien być umieszczany w blokach SCRIPT na samym początku stron ASP.NET i oddzielony od kodu HTML. Oddzielenie obu rodzajów kodu zostało przedstawione na rysunku 19.1.

 

Kod ASP.NET

<%@Page Language="VB" %>

<%@Import Namespace="System.Xml" %>

<%@Import Namespace="System.Xml.XPath" %>

 

<script runat="server">

   sub SelectData(obj as object,e as eventargs)

      Dim objDocument as New XPathDocument _

         (Server.MapPath("../r11/books.xml"))

 

      Dim objNav as XPathNavigator = objDocument.CreateNavigator

 

      lblMessage.Text = ""

      try

         dim objIterator as XPathNodeIterator = _

            objNav.Select(tbQuery.Text)

                           

         While objIterator.MoveNext()

            lblMessage.Text += "&lt;" & _

               objIterator.Current.Name & "&gt; " & _

               objIterator.Current.Value & "<br>"

         end while

      catch ex As Exception

         lblMessage.Text = ex.Message

      end try

   end sub

</script>

Kod HTML

<html><body>

   <form runat="server">

      <h2>Zapytania XPath</h2>

      <p>

      Na przyład:<br>

      <b><code>//book[last()]/@ISBN/text()</b></code> lub

      <b><code>descendant::book/author/last-name</b></code><p>

     

      Podaj zapytanie XPath:

      <asp:Textbox id="tbQuery" runat=server/>

      <asp:Button id="btnSubmit" text="Wykonaj zapytanie"

         runat=server OnClick="SelectData"/><p>

      <asp:Label id="lblMessage" runat=server/>

   </form>

</body></html>

 

Rysunek 19.1.              Idealny sposób zapisu stron ASP.NET

Opis rysunku

ASP.NET Code — Kod ASP.NET

(kod ASP.NET został oznaczony jako górna ramka)

HTML Code — Kod HTML

(kod HTML został oznaczony jako dolna ramka)

 

Tworzenie kodu w sposób przedstawiony na rysunku 19.1 jest bardzo korzystne i to z wielu powodów — łatwiej można modyfikować zarówno kod ASP.NET jak i kod HTML, kod źródłowy strony staje się w ten sposób bardziej logiczny i nie trzeba szukać w nim bloków kodu wykonywalnego. Niemniej jednak możliwości rozdzielania różnych rodzajów kodu jakie daje ASP.NET są jeszcze większe. Dzięki wykorzystaniu kodu obsługi oraz plików zasobów można całkowicie oddzielić kod od zawartości strony. Pierwsze z powyższych rozwiązań umożliwia zapisywanie kodu w niezależnych plikach, natomiast drugie — zgrupowanie często wykorzystywanych wartości (takich jak na przykład komunikaty o błędach) i zapisanie ich w jednym miejscu, niezależnym od strony ASP.NET.

Kod obsługi formularzy

Patrząc na rysunek 19.1 nie trudno zauważyć korzyści płynące z oddzielenia kodu od treści strony. Ale co by się stało, gdyby można było usunąć całą początkową zawartość pliku .aspx? Dzięki temu istniałaby możliwość faktycznego oddzielenia kod ASP.NET do zawartości strony. Technologia ASP.NET pozwala na osiągnięcie takiej separacji dzięki wykorzystaniu kodu obsługi formularzy. Kod obsługi formularzy jest sposobem na całkowite oddzielenie każdego i całego kodu ASP.NET od kodu interfejsu użytkownika. Teraz zamiast jednego pliku z rysunku 19.1 otrzymujemy dwa pliki przedstawione na rysunku 19.2.

 

Wyłącznie kod HTML

<%@ Page Inherits="CodeBehind2" src="CodeBehind2.vb" %>

 

<html><body>

   <form runat="server">

      <asp:Calendar id="Calendar1" runat="server"

         OnSelectionChanged="DateChanged"

         Cellpadding="5" Cellspacing="5"

         DayHeaderStyle-Font-Bold="True"

         DayNameFormat="Short"

         Font-Name="Arial" Font-Size="12px"

         height="250px"

         NextPrevFormat="ShortMonth"

         NextPrevStyle-ForeColor="white"

         SelectedDayStyle-BackColor="#ffcc66"

         SelectedDayStyle-Font-Bold="True"

         SelectionMode="DayWeekMonth"

         SelectorStyle-BackColor="#99ccff"

         SelectorStyle-ForeColor="navy"

         SelectorStyle-Font-Size="9px"

         ShowTitle="true"

         TitleStyle-BackColor="#ddaa66"

         TitleStyle-ForeColor="white"

         TitleStyle-Font-Bold="True"

         TodayDayStyle-Font-Bold="True" />

   </form>

   Wybrałeś:

   <asp:Label id="lblMessage" runat="server"/>

</body></html>

 

Wyłącznie kod ASP.NET (kod obsługi formularza)

Imports System

Imports System.Web

Imports System.Web.UI

...

Zgłoś jeśli naruszono regulamin