55
ASP.NET Atlas Wojciech Rygielski [email protected]

ASP.NET Atlas

  • Upload
    blithe

  • View
    35

  • Download
    2

Embed Size (px)

DESCRIPTION

ASP.NET Atlas. Wojciech Rygielski [email protected]. ASP.NET 2.0 Atlas. 1. ASP.NET. Zmiany w ASP.NET 2.0. Kod można umieszczać na stronie (tzn. w pliku .aspx, nie koniecznie w .aspx.cs) Kompilacja projektu jest zbędna (jest wtedy kompilowany automatycznie przy odwołaniu się do strony). - PowerPoint PPT Presentation

Citation preview

Page 1: ASP.NET Atlas

ASP.NETAtlas

Wojciech [email protected]

Page 2: ASP.NET Atlas

1. ASP.NET 2.02. Atlas

Page 3: ASP.NET Atlas

1. ASP.NET

Page 4: ASP.NET Atlas

Zmiany w ASP.NET 2.0

Kod można umieszczać na stronie (tzn. w pliku .aspx, nie koniecznie w .aspx.cs)

Kompilacja projektu jest zbędna (jest wtedy kompilowany automatycznie przy odwołaniu się do strony)

Page 5: ASP.NET Atlas

Zmiany w ASP.NET 2.0 cd. Master pages

Umożliwienie tworzenia pseudo-obiektowej hierarchii wyglądu stron w aplikacji (strona może wywoływać metody publicznych obiektów w swojej master-stronie)

Łatwe dodawanie wspólnych elementów dla wszystkich stron (np. menu w plików sitemap), elementy te mogę być konfigurowalne

Wielopoziomowe zagnieżdżanie<%@ master language="C#" master="~/TopLevel.master"%>

Page 6: ASP.NET Atlas

MasterPage.master

...<asp:label runat="server" id="Header">xyz

</asp:label>...<asp:contentplaceholder id="srodek" runat="Server">

</asp:contentplaceholder>...

Page 7: ASP.NET Atlas

Page.aspx<script runat="server">

void Page_Load(object sender, System.EventArgs e){

Label headerLabel = (Label)Master.FindControl("Header");

headerLabel.Text = "abc";}

</script>...<asp:content runat="server" id="Content1"

contentplaceholderid="srodek">ghi

</asp:content>

Page 8: ASP.NET Atlas

Zmiany w ASP.NET 2.0 cd.

WebParts (zbiór komponentów umożliwiających użytkownikom końcowym personalizację wyglądu strony)

Lepsze cachowaniemożliwość odświeżenia cache po zmianach w

bazie danych (w MSSQL7 na poziomie tabeli, w kolejnej wersji na poziomie wiersza)

Page 9: ASP.NET Atlas

Odświeżanie cache przy zmianach bazie danychNa stronie:

<%@ OutputCache duration="3600" varybyparam="none" sqldependency="Northwind:Employees" %>

W konfiguracji (web.config):<system.web>

<cache> <sqlCacheDependency enabled = "true" pollTime = "1000" > <databases> <add name="Northwind" connectionStringName="Northwind" pollTime = "1000"/> </databases> </sqlCacheDependency> </cache> </system.web>

W bazie danych (SqlCacheDependencyAdmin.EnableTableForNotifications)

Page 10: ASP.NET Atlas

Zmiany w ASP.NET 2.0 cd.

Personalizacja (role) http://www.ondotnet.com/pub/a/dotnet/2004/10/25/libe

rtyonwhidbey.html?page=1 użytkownik/role wbudowane w logikę ASP kontrolki w rodzaju <asp:Login>, <asp:LoginView>,

<asp:PasswordRecovery>, <asp:CreateUserWizard> itp.

Mechanizm logowania można stworzyć całkowiecie deklaratywnie

Page 11: ASP.NET Atlas

Sposoby przechowywania stanu aplikacji Application ViewState Session Profile (nowość)

Page 12: ASP.NET Atlas

-> Application// global.asax:void Application_Start(object sender, EventArgs e) {

Application.Add("clickCount", 0);Application.Add("userCount", 0);

}void Session_Start(object sender, EventArgs e) {

Application["userCount"] = ((int)Application["userCount"]) + 1;}void Session_End(object sender, EventArgs e) {

Application["userCount"] = ((int)Application["userCount"]) - 1;}// *.aspx.cs:protected void Button1_Click(object sender, EventArgs e) {

Application["clickCount"] = ((int)Application["clickCount"]) + 1;this.Label1.Text = Application["clickCount"].ToString();

}

Page 13: ASP.NET Atlas

-> ViewState / Session

ViewStateZapisywane w formularzu na stronieEnableViewState w wielu kontrolkachNie przeterminowuje się

SessionPrzechowywane w pamięci serweraDane usuwane po wygaśnięciu sesji

Page 14: ASP.NET Atlas

Fragment „wyprodukowanej” strony z ViewState<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkyODQzNTM0NGRkTWNuBnFzfOqEto/CAI4sdj057c0=" />

Page 15: ASP.NET Atlas

ViewState / Session / Profile

liczniki („na żywo”)

Page 17: ASP.NET Atlas

-> Profile (web.config)<profile>

<properties><group name="Name">

<add name="Last" /><add name="First" />

</group><add name="phoneNumber" /><add name="birthDate"

type="System.DateTime"/></properties>

</profile>

Page 18: ASP.NET Atlas

Profile (wykorzystanie w kodzie)void save_Click(object sender, EventArgs e){

Profile.lastName = this.lastName.Text;Profile.firstName = this.firstName.Text;Profile.phoneNumber = this.phone.Text;Profile.birthDate = Convert.ToDateTime(this.birthDate.Text);Response.Redirect("Default.aspx");

}

Page 19: ASP.NET Atlas

Zmiany w ASP.NET 2.0 cd.

Themes Pliki *.skin – domyślne ustawienia kontrolek

<asp:Button runat="server" BackColor="Black" ForeColor="White" Font-Name="Arial" Font-Size="10px" />

Można powiązać ze wszystkimi stronami, lub z wybranymi:<%@Page theme="Testheme" %>

Można zmieniać w trakcie wykonania (Page.Theme) Wartości nie tylko spośród adekwatnych im wartości

CSS

Page 20: ASP.NET Atlas

Zmiany w ASP.NET 2.0 cd.

Nowe źródła danych<asp:SqlDatasource><asp:ObjectDatasource>

obiekt jako wiersz/tabela (więcej zaraz)<asp:AccessDatasource><asp:XmlDatasource><asp:SitemapDatasource>

używany np. przez komponent menu

Page 21: ASP.NET Atlas

ObjectDataSource atrybuty (właściwości? pary set+get)

obiektów widoczne jako wartości kolumn (interpretacja: wiersz)

obiekt może mieć metodę zwracającą kolekcję obiektów (interpretacja: tabela)public ICollection GetData() {

ArrayList list = new ArrayList();list.Add(new InnyObiekt(bla,bla,bla));list.Add(new InnyObiekt(bla,bla,bla));return list;

}

Page 22: ASP.NET Atlas

ObjectDataSource

Page 23: ASP.NET Atlas

ObjectDataSource

Page 24: ASP.NET Atlas

Wykorzystanie źródeł danych

Wiele funkcjonalności możemy opisać bez pisania kodu (nie chodzi tylko o zapytania select, ale również update/insert/delete)

Dużo kontrolek obsługujących źródła danych (<asp:gridview>, <asp:formview>, <asp:detailsview>), radzących sobie z problemami konkurencyjności itp.

Spójny model i API

Page 25: ASP.NET Atlas

Podsumowanie aplikacji webowych w ASP.NET Logika aplikacji webowej nie odbiega

bardzo od logiki tworzenia zwykłej aplikacji okienkowej

W czystym ASP.NET (bez ręcznie pisanych skryptów), praktycznie każde kliknięcie myszką oznacza przeładowanie całej strony

Page 26: ASP.NET Atlas

Przykładowa aplikacja ASP.NET

(„na żywo”)

Page 27: ASP.NET Atlas

2. Atlas

Page 28: ASP.NET Atlas

Realizacje AJAX dla ASP.NET

ComfortASP.NET MagicAJAX.NET ZumiPage ATLAS (CTP) OutPost FastPage

ComponentArt Telerik Dart PowerWeb Anthem Syncfusion Studio

Page 29: ASP.NET Atlas

AJAX+ASP – dwie koncepcje

Rozwiązanie 1 – dynamiczne odświeżanie całej strony zamiast przeładowywać całą stronę, wysyłany jest

request w tle po stronie serwera sporządzana jest lista zmian na

stronie (diff) i sama lista zmian jest przesyłana do klienta

lista zmian jest aplikowana dynamicznie po stronie klienta

Page 30: ASP.NET Atlas

(1) Dynamiczne odświeżanie strony

Założenia: Strona jest wyświetlana tak jak bez AJAX W kodzie aplikacji generalnie nic się nie zmienia

Wpływ na wzorzec aplikacji Logika aplikacji zostaje po stronie ASP (ograniczenie

używanych skryptów JS) „Stan” aplikacji zmienia się wciąż tylko podczas

przeładowywania strony

Page 31: ASP.NET Atlas

(1) Dynamiczne odświeżanie strony

Problemy (implementacji rozwiązania):Rozmiar przesyłanych danych; po każdym

AJAXowym żądaniu, przesyłane są te rzeczy, które zmieniły się na stronie ASP („diff”)

Ewentualne skrypty JS powinny być po takim żądaniu odświeżane i resetowane (tak jak by to było po odświeżeniu strony)

Page 32: ASP.NET Atlas

AJAX+ASP – dwie koncepcje

Rozwiązanie 2 – odświeżanie kontrolekdecyzję o tym co ma być odświeżane

podejmuje programista

Page 33: ASP.NET Atlas

(2) Odświeżanie kontrolek Założenia:

Oznaczamy na stronie kontrolki, które mogą się zmienić („partial/selective update”)

Wpływ na wzorzec aplikacji Możliwy rozwój „prawdziwej” aplikacji AJAXowej (w sensie: takiej

jak do tej pory, a nie „symulowanej” jak w (1)) W dalszym ciągu możliwy rozwój „normalnej” aplikacji ASP

Przeniesienie części logiki AJAXowej do zapisu deklaratywnego (w Atlasie: UpdatePanel)

(Różne inne zależności zależne od implementacji)

Page 34: ASP.NET Atlas

Sposoby oznaczania zmieniających się kontrolek Różne sposoby w różnych implementacjach:

Najbardziej popularny: zamknięcie kontrolek w „odświeżającym się” panelu

Oznaczenie poszczególnych kontrolek w kodzie aplikacji

„Ręczne” zdecydowanie, które kontrolki mają być przesłane, podczas odpowiadania na żądanie

Wykrywanie po stronie klienta, które kontrolki powinny być zmienione, przesyłanie ich ID w żądaniu (?)

Page 35: ASP.NET Atlas

ATLAS

Microsoftowa implementacja biblioteki AJAX pod ASP.NET

Na razie uboga, rozwija się „Atlas” to tylko tymczasowa nazwa Omawiana tutaj wersja - April (2006) Community

Technology Preview (CTP) API wciąż się zmienia (używać na własne

ryzyko)

Page 36: ASP.NET Atlas

Szok ;)

Atlas działa pod Firefoxem(dla przypomnienia: Atlas jest Microsoftu)

Page 37: ASP.NET Atlas

Czym jest Atlas1. zbiorem plików .js dołączanych do emitowanych stron,

rozszerzających możliwości JavaScriptu2. sposobem deklaratywnego opisania interakcji

komponentów na stronie (XML-script)3. zbiorem komponentów do wykorzystania po stronie

serwera, emitujących odpowiedni XML-script interpretowany przez (1)

Możemy zaprzestać na każdej z tych trzech warstw abstrakcji (stąd np. pomysły wykorzystania niższych warstw Atlasa w PHP)

Page 38: ASP.NET Atlas

(1) Rozszerzenia do JavaScriptu

AtlasRuntime.js Atlas.js AtlasCompat.js AtlasCompat2.js AtlasFX.js AtlasUIDragDrop.js AtlasUIGlitz.js AtlasUIMap.js AtlasWebParts.js GadgetRuntime.js

Page 39: ASP.NET Atlas

Atlasowy JavaScript Dodatkowe obiekty, funkcje i typy danych (klasy,

przestrzenie nazw, enumeracje, interfejsy, dziedziczenie).

Klasy do debuggowania, obsługi zdarzeń (events) i stringów, wywołań XML (webservices), timery i inne

Obsługa UI – kontrolki, zachowania (behaviors), walidacja, wiązanie danych, drag&drop...

Atlasowe „implementacje” wielu standardowych kontrolek HTML (hyperlink, listview, select, dataview, button, checkbox, textbox, label, datasource, counter)

Page 40: ASP.NET Atlas

Przykład: dodawanie klasy do przestrzeni nazwType.registerNamespace("Demo");

Demo.Person = function(firstName, lastName, emailAddress) {var _firstName = firstName;var _lastName = lastName;var _emailAddress = emailAddress;

this.getFirstName = function() {return _firstName;

}// ...pozostałe akcesory...

this.dispose = function() {alert('bye ' + this.getName());

}}Demo.Person.registerClass('Demo.Person', null, Web.IDisposable);

Page 41: ASP.NET Atlas

Przykład: dziedziczenieDemo.Employee = function(firstName, lastName, emailAddress, team, title) { Demo.Employee.initializeBase(this, [firstName, lastName,

emailAddress]); var _team = team; var _title = title; this.getTeam = function() { return _team; } this.setTeam = function(team) { _team = team; } ...}Demo.Employee.registerClass('Demo.Employee', Demo.Person);

Page 42: ASP.NET Atlas

Przykład: overrideDemo.Person.prototype.toString = function() {

return this.getName() + ' (' + this.getEmailAddress() + ')';

}

Demo.Employee.prototype.toString = function() {return Demo.Employee.callBaseMethod(this, 'toString') + '\r\n' + this.getTitle() + '\r\n' + this.getTeam();

}

Page 43: ASP.NET Atlas

Przykład: obsługa atlasowych „obiektów”g_panel = new Sys.UI.Control($('panel'));g_panel.initialize();g_panel.set_cssClass('normal');

g_selColor = new Sys.UI.Select($('colorSelect'));g_selColor.initialize();g_selColor.selectionChanged.add(onSelectColor);

g_tbx = new Sys.UI.TextBox($('textBox')); g_tbx.initialize();g_tbx.set_text("Simple text box control");g_tbx.set_cssClass("textBox");

var btnVisibility = new Sys.UI.Button($('visibilityButton'));btnVisibility.initialize();btnVisibility.click.add(onSetVisibilityClick);

Page 44: ASP.NET Atlas

(2) XML-script

Możliwość deklaratywnego zapisu wielu (AJAX-owych) aspektów aplikacji w postaci XML (zamiast kodu JS)

Page 45: ASP.NET Atlas

<input type="text" id="searchText" /><input type="button" id="searchButton" />

<script type="text/xml-script"> <page xmlns="http://schemas.microsoft.com/xml-script/2005"> <references> <add src="ScriptLibrary/Atlas/AtlasUI.js" /> <add src="ScriptLibrary/Atlas/AtlasControls.js" /> </references> <components> <textbox id="searchText" /> <button id="searchButton"> <bindings> <binding property="enabled" dataContext="searchText" dataPath="text.length" transform="NumberToBoolean" /> </bindings> <click> <invokeMethod target="searchMethod" method="invoke" /> </click> </button> <serviceMethod id="searchMethod"> <bindings> <binding property="parameters" propertyKey="query" dataContext="searchText" dataPath="text" /> </bindings> </serviceMethod> </components> </page></script>

Page 46: ASP.NET Atlas

Argumenty twórców Atlasa za wprowadzeniem XML-script Deklaratywny XML jest dużo łatwiejszy do

przetwarzania w sposób automatyczny niż kod (Designer w Visual Studio)

W Atlasowych kontrolkach serwera - łatwiej jest emitować XML niż JavaScript (XmlTextWriter)

Deklaratywny sposób zapisu pozwala zdefiniować potrzeby zamiast akcji

Niektóre proste sytuacje mogą być opisane dużo łatwiej i bezpieczniej niż w JS [zdaje się, że chodzi tutaj w szczególności o wiązanie (binding)]

Page 47: ASP.NET Atlas

Przykład: sprawdzanie poprawności formularza<textBox id="value1TextBox">

<validators><requiredFieldValidator errorMessage="You must enter

some text." /></validators>

</textBox><validationErrorLabel id="validator1"

associatedControl="value1TextBox" />

<label id="value1Label"><bindings>

<binding dataContext="value1TextBox" dataPath="text" property="text" /></bindings>

</label>

Page 48: ASP.NET Atlas

Przykład: sprawdzanie poprawności formularza cd.<textBox id="value2TextBox">

<validators><requiredFieldValidator

errorMessage="You must enter a number." /><typeValidator type="Number”

errorMessage="You must enter a valid number." /><rangeValidator lowerBound="10" upperBound="20”

errorMessage="You must enter a number between 10 and 20." /></validators>

</textBox><validationErrorLabel id="validator2" visibilityMode="Hide"

associatedControl="value2TextBox" />

Page 49: ASP.NET Atlas

Przykład: inne wymysły<label id="hideLabel">

<behaviors><clickBehavior>

<click><setProperty target="panel" property="visible"

value="false" /></click>

</clickBehavior></behaviors>

</label>

<control id="DescriptionDrag”><behaviors>

<floatingBehavior handle="DescriptionDrag"></floatingBehavior>

</behaviors></control>

Page 50: ASP.NET Atlas

Przykład: łączenie XML-scriptu z javascriptem

<script type="text/xml-script"> <page xmlns:script="http://schemas.microsoft.com/xml-script/2005"> <components> <label id="greeting" /> <button id="helloButton" click="sayHello" > <click> <setProperty target="greeting" property="text" value="hello

there" /> </click> </button> </components> </page> </script> <script type="text/javascript"> function sayHello() { alert("hello"); } </script>

Page 51: ASP.NET Atlas

(3) Kontrolki serwera emitujące XML-script Wszystko co opisane wcześniej można zamknąć

w logice kontrolki ASP Predefiniowanych kontrolek jest na razie mało,

ich lista wciąż się zmienia, obsługa w Visual Studio jest ograniczona (szczególnie w Designerze).

Jest gotowy interfejs do tworzenia własnych kontrolek (który być może już się bardzo nie zmieni)

Page 52: ASP.NET Atlas

Dodanie funkcjonalności Atlasowych do aplikacji ASP („na żywo”)

Page 53: ASP.NET Atlas
Page 55: ASP.NET Atlas

THE END