610 likes | 834 Views
ASP.NET 2.0 alkalmazások arculata és testreszabása. Kereskényi Róbert roby@aut.bme.hu MSDN Kompetencia Központ Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatikai Tanszék. Tartalom. Személyre szabhatóság Felhasználói élmény Mesteroldalak Témák
E N D
ASP.NET 2.0 alkalmazások arculata és testreszabása Kereskényi Róbert roby@aut.bme.hu MSDN Kompetencia Központ Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási és Alkalmazott Informatikai Tanszék
Tartalom • Személyre szabhatóság • Felhasználói élmény • Mesteroldalak • Témák • Navigáció • Lokalizáció
Webkijelző keretrendszer • Keretrendszer portál stílusú alkalmazásokhoz • System.Web.UI.WebControls.WebParts • Gazdag UI minimális kód árán • Fogd-és-vidd átrendezés • Megjelenés, viselkedés, stb. szerkesztése • Automatikus személyre szabhatóság • Összekapcsolás, üzenetek
WebPartManager, WebPartZone • WebPartManager • Oldalanként egy van • Nem vizuális vezérlőelem • Az oldalon lévő webkijelzőket menedzseli • WebPartZone • Zónákat definiál egy oldalon • Ebben lehetnek majd a webkijelzők • Definiálja a webkijelzők megjelenését • WebPartChrome – címsor és keret
WebPart • Webkijelző zónákban lévő kontrollok • WebControls, UserControls, CustomControls • Ha nem implementálja IWebPart-ot • GenericWebPart-ba csomagolódik • Webkijelző tulajdonságokat kap: Title, Description, ... <ZoneTemplate> <asp:CalendarTitle="Calendar" ID="Calendar1" RunAt="server" /> <user:WeatherTitle="Weather" ID="Weather1" RunAt="server" /> <custom:SearchTitle="Search" ID="Search1" RunAt="server" /> </ZoneTemplate>
Példa WebPartzone WebPart Menü gombok Címsor Keret
CatalogZone • CatalogZone • CatalogPart vezérlőket tartalmaz • Ezekből webkijelzőket tehetünk fel az oldalunkra • DeclarativeCatalogPart • Fejlesztő által definiált lista • PageCatalogPart • Bezárt webkijelzők listája • ImportCatalogPart • webkijelzőket importálhatunk fájlból
EditorZone • EditorPart vezérlőket tartalmaz • Webkijelzők kinézetét szerkeszthetjük • AppearanceEditorPart • Title, width, height, … • BehaviorEditorPart • Edit, Close, Minimize button • LayoutEditorPart • Chrome State, Zone, Zone Index • PropertyGridEditorPart • Saját Property-k szerkesztése
PropertyGridEditorPart • Saját tulajdonságok szerkesztése futás közben • [WebBrowsable] string _stocks; // e.g., "MSFT,INTC,AMZN" [WebBrowsable] public string Stocks { get { return _stocks; } set { _stocks = value; } } Ezáltal megjelenik majd PropertyGridEditorPart-on Így néz ki felületen
Webkijelzők együttműködése • A webkijelzők képesek együttműködni • Üzenetet küldeni • Üzenetet fogadni • Adott interfészen keresztül • WebPartManager felügyeli • Kikeresi az interfészt a szolgáltatótól • Átadja a fogyasztónak • Statikus, dinamikus összekapcsolás
Személyre szabhatóság • Automatikusan eltárolja a webkijelzők tulajdonságait • felhasználónként vagy közösen • Layout, kinézet, … • Saját property, ami [Personalizable] • PersonalizationAdministration osztály • Provider-alapú rugalmas
Tartalom • Személyre szabhatóság • Felhasználói élmény • Mesteroldalak • Témák • Navigáció • Lokalizáció
Mesteroldalak • Vizuális öröklés Mesteroldal Tartalom oldal
Mesteroldalak működése • Mester oldal tartalmazza a közös tartalmat és tartalom helyőrzőket (<asp:ContentPlaceHolder>) • Tartalom oldalhivatkozik a mesterre és kitölti a helyőrzőket (<asp:Content>) Site.master default.aspx http://.../default.aspx Content-PlaceHolder Content
Mester oldal definiálása <%@ Master %> <html> <body> <!-- Banner shown on all pages that use this master --> <tablewidth="100%"> <tr> <tdbgcolor="darkblue" align="center"> <spanstyle="font-size: 36pt; color: white"> Webes megoldások ASP.NET 2.0 alapokon</span> </td> </tr> </table> <!-- Placeholder for content below banner --> <asp:ContentPlaceHolderID="Main" RunAt="server" /> </body> </html>
Mester oldal alkalmazása • Egy oldalra (.aspx) • Az egész webhelyre (Web.config) <%@ PageMasterPageFile="~/Site.master" %> <asp:ContentContentPlaceHolderID="Main" RunAt="server"> Ez a szöveg jelenik meg a mester oldalon definiált "Main" nevű kontrolban </asp:Content> <system.web> <pagesmasterPageFile="~/Site.master" /> … </system.web>
Alapértelmezett tartalom • Tartalom helyőrzőknek lehet saját tartalmuk (alapértelmezett tartalom) • Ez csak akkor jelenik meg ha a tartalom oldal nem tölti ezt ki <%@ Master %> ... <asp:ContentPlaceHolderID="Main" RunAt="server"> This is default content that will appear in the absence of a matching Content control in a content page <asp:ContentPlaceHolder>
Mesteroldal mesteroldala • Mesteroldalak egymásba ágyazhatók • Ha egy mesteroldalnak van mesteroldala, akkor az alsóbb mesteroldal • Tölti ki a felsőbb helyőrzőit • De neki is lehetnek saját helyőrzői • Csak forrás nézetben (nincs design támogatás) <!– Level1.Master --> <%@ MasterMasterPageFile="~/Level0.Master" %> <asp:ContentContentPlaceHolderID="..." RunAt="server"> <asp:ContentPlaceHolderID="..." RunAt="server"> ... </asp:ContentPlaceHolder> <asp:Content>
Elérés kódból • Page.MasterPageFile • Master beállítása futási időben • Pre_Init fázisban vagy hamarabb • Page.Master • System.Web.UI.Page új tulajdonsága • Referencia a mester oldalra • NULL ha nincs mesteroldal • A mester vezérlőinek elérése • A mester public és protected metódusainak és tulajdonságainak elérése • A mester és a tartalom oldalak kód szintű összekapcsolása
Erősen típusos mesteroldal Mester oldal .aspx <asp:LabelID= "lblTitle" RunAt="server" /> .cs public Label MasterTitle { get { returnthis.lblTitle; } set { this.lblTitle = value; } } Tartalom oldal .aspx <%@ MasterTypeVirtualPath="~/Master1.master" %> .cs Master.MasterTitle.Text = "Orders";
URL Rebasing • URL hivatkozások a mester oldalban gondot okozhatnak, ha • Mester és tartalom oldal fizikailag külön helyen van • Mester oldalon relatív URL hivatkozás \Level1.master <ahref= "MainPage.aspx" />MainPage</a> \Default\Default.aspx <%@ PageMasterPageFile="~/Level1.master" %> • Megoldás: • Abszolút (/MainPage.aspx) vagy • Alkalmazás relatív (~/MainPage.aspx) URL-ek használata a mesteroldalon MainPage hivatkozás URL-je: \Default\MainPage.aspx
Tartalom • Személyre szabhatóság • Felhasználói élmény • Mesteroldalak • Témák • Navigáció • Lokalizáció
Témák és bőrök • Webhely stílusinformációinak csoportokba gyűjtése • Bőr = vezérlők vizuális jellemzője • .skin fájlokban tárolva • Alapértelmezett és nevesített bőrök • Téma = bőrök halmaza, gyűjteménye • Themes alkönyvtárban • Globális és lokális témák
Bőrök • Alapértelmezett (default) • SkinID nélkül definiált bőrök • Minden olyan adott típusú kontrollra, aminek nincs SkinID tulajdonsága • Nevesített (named) • SkinID-val definiált bőrök • Lehet ugyanabban a fájlban mint az alapértelmezett bőr • A vezérlők SkinID tulajdonságával hivatkozhatunk a nevesített bőrökre
Téma alkalmazása • Egy alkalmazás minden lapjára • Egy lap minden vezérlőjére • Kódból <configuration> <system.web> <pagestheme="BasicBlue" /><!-- Case Sensitive!! --> </system.web> </configuration> <%@ PageTheme="BasicBlue"> void Page_PreInit (Object sender, EventArgs e) { Page.Theme = "BasicBlue"; }
Lokális témák Webapp_ root Téma neve = Alkönyvtár neve App_Themes Shocking-Pink SKIN SKIN Autumn-Leaves SKIN SKIN
Globális témák %WINDIR%\Microsoft.NET\Framework\<version>\ASP.NETClientFiles\ ASP.NET_ ClientFiles Téma neve = Alkönyvtár neve Themes BasicBlue SKIN SKIN SmokeAndGlass SKIN SKIN
Theme vs StyleSheetTheme • Theme • a bőrben definiált tulajdonságok felülírják az azonos nevű a lapban lokálisan definiált tulajdonságokat • StyleSheetTheme • Lokálisan definiált tulajdonság írja felül a bőrben definiáltat • Theme és StyleSheetTheme egyszerre • StyleSheetTheme tulajdonságok • Lokálisan definiált tulajdonságok (felülírva a StyleSheetTheme-et) • Theme-ben definiált tulajdonságok (felülírva előzőeket)
Tartalom • Személyre szabhatóság • Felhasználói élmény • Mesteroldalak • Témák • Navigáció • Lokalizáció
Adatvezérelt navigáció • Navigációs felületet nehéz megvalósítani • Kliens oldali scriptek, frissítés, stb. • Új navigációs vezérlőelemek • SiteMapPath – „Kenyérmorzsa” vezérlőelem • SiteMapDataSource – XML webhely térkép • TreeView, Menu – navigációs vezérlők • Publikus webhely térkép és API • Provider alapú Rugalmas!
Navigáció - alapok Vezérlők Menu TreeView SiteMap- DataSource SiteMapPath Site Map API SiteMap SiteMapNode SiteMapNode SiteMapNode Providerek XmlSiteMapProvider stb. Webhelytérképek Web.sitemap stb.
XML webhely térkép <?xmlversion="1.0" encoding="utf-8" ?> <siteMap> <siteMapNodetitle=„Kezdőlap" description="" url="default.aspx"> <siteMapNodetitle=„Kurzusok" url=„Course.aspx" description=„ASP.NET 2.0 kurzusok"> <siteMapNodetitle=„Adatkezelés" url="Course.aspx?id=1"/> <siteMapNodetitle=„Felhasználói profil" url="Course.aspx?id=2"/> <siteMapNodetitle=„Felhasználói felület" url="Course.aspx?id=3"/> </siteMapNode> <siteMapNodetitle="Adminisztrátoroknak" url="Admin.aspx" description=„Adminisztrátori oldal" roles="Admins"/> </siteMapNode> </siteMap>
SiteMapNode.Roles • Csak azok a navigációs elemek jelennek meg, amihez joga van a felhasználónak <system.web> <siteMap> <providers> <removename="AspNetXmlSiteMapProvider" /> <addname="AspNetXmlSiteMapProvider" …securityTrimmingEnabled="true" siteMapFile="web.sitemap" /> </providers> </siteMap> </system.web> <?xmlversion="1.0" encoding="utf-8" ?> <siteMap> <siteMapNode> <siteMapNodetitle="Admin" url= "~/Admin.aspx"roles="Admins" /> </siteMapNode> </siteMap>
SiteMapDataSource • Nem látható vezérlőelem • A webhelytérképet reprezentálja • A SiteMapPath, TreeView és Menu vezérlőkhöz adatforrás • Provider alapú rugalmas! • SiteMap fájlnév megadása • Saját adatforrás megadása
TreeView vezérlőelem • Hierarchikus struktúra fa szerkezetben való megjelenítésére • Nyitható-zárható szintek • A node-ok kiválaszthatók, navigálni tudnak, és checkbox-ot is tartalmazhatnak • TreeNode objektumokból áll • Deklaratívan, kódból, és adatkötéssel is megadható • On-demand is betölthető • Könnyen definiálható UI
TreeView webhelytérképből <asp:SiteMapDataSourceID="SiteMap" RunAt="server" ShowStartingNode="false"/> <asp:TreeViewDataSourceID="SiteMap" RunAt="server" /> Web.sitemap <?xmlversion="1.0" encoding="utf-8" ?> <siteMap> <siteMapNodetitle="Home" description="" url="default.aspx"> <siteMapNodetitle="Training" url="Training.aspx" description="Training for .NET developers"> <siteMapNodetitle="Programming .NET" url="Classes.aspx?id=1" description="All about the .NET Framework" /> <siteMapNodetitle="Programming ASP.NET" url="Classes.aspx?id=2"description="All about ASP.NET" /> <siteMapNodetitle="Programming Web Services" url="Classes.aspx?id=3"description="All about Web services"/> </siteMapNode> <siteMapNodetitle="Consulting" url="Consulting.aspx" description="Consulting for .NET projects" /> <siteMapNodetitle="Debugging" url="Debugging.aspx" description="Help when you need it the most" /> </siteMapNode> </siteMap>
TreeView On-Demand töltés <asp:TreeViewOnTreeNodePopulate="OnPopulate" EnableClientScript="false" RunAt="server"> <Nodes> <asp:TreeNodeText="Populate this node on demand" PopulateOnDemand="true" RunAt="server" /> </Nodes> </asp:TreeView> . . . <scriptlanguage="C#" runat="server"> void OnPopulate (Object sender, TreeNodeEventArgs e) { // Called first time the populate-on-demand node is expanded TreeNode node = new TreeNode ("This node added dynamically"); e.Node.ChildNodes.Add (node); } </script>
Menu vezérlőelem • Hierarchikus struktúra lenyíló/kinyíló menüben való megjelenítésére • Kiválasztható vagy navigálható menüelem • Vízszintes vagy függőleges orientáció • MenuItem objektumokból áll • Deklaratívan, kódból, és adatkötéssel is megadható • Könnyen definiálható UI
Menü webhelytérképből <asp:SiteMapDataSourceID="SiteMap" RunAt="server" ShowStartingNode="false"/> <asp:TreeViewDataSourceID="SiteMap" RunAt="server" /> Web.sitemap <?xmlversion="1.0" encoding="utf-8" ?> <siteMap> <siteMapNodetitle="Home" description="" url="default.aspx"> <siteMapNodetitle="Training" url="Training.aspx" description="Training for .NET developers"> <siteMapNodetitle="Programming .NET" url="Classes.aspx?id=1" description="All about the .NET Framework" /> <siteMapNodetitle="Programming ASP.NET" url="Classes.aspx?id=2"description="All about ASP.NET" /> <siteMapNodetitle="Programming Web Services" url="Classes.aspx?id=3"description="All about Web services"/> </siteMapNode> <siteMapNodetitle="Consulting" url="Consulting.aspx" description="Consulting for .NET projects" /> <siteMapNodetitle="Debugging" url="Debugging.aspx" description="Help when you need it the most" /> </siteMapNode> </siteMap>
SiteMapPath vezérlőelem • „Kenyérmorzsa vezérlő” • A legfelső szinttől az aktuális oldalig vezető utat mutatja • Aktuális oldal statikus szöveg • Szülők hivatkozások (hyperlink) • Könnyen definiálható UI • A csomópontok és az elválasztó elemek jól sablonizálhatóak • SiteMapProvider-re épül
SiteMapPath használata <asp:SiteMapPathFont-Name="Verdana" Font-Size="10pt" RunAt="server"> <CurrentNodeStyleHeight="24px" BackColor="Yellow" Font-Bold="true" /> <NodeStyleHeight="24px" /> <PathSeparatorTemplate> <ItemTemplate> <asp:ImageImageUrl="~/images/arrow.gif" RunAt="server" /> </ItemTemplate> </PathSeparatorTemplate> </asp:SiteMapPath>
SiteMap Providers • SiteMap provider alapú • A webhelytérkép adatait feldolgozza és SiteMapDataSource-nak biztosítja • Aktuális weblap információ meghatározása a webhely térkép alapján • SiteMapPath vezérlőelem forrása • ASP.NET 2.0-ban egy beépített provider • XmlSiteMapProvider • Kiterjeszthető saját providerek saját adatforrásokhoz
SiteMap API • System.Web.SiteMap • Webhelytérképet reprezentálja • RootNode • CurrentNode • SiteMapNode • Egyetlen node-ot reprezentál • Node tulajdonságai lekérdezhetők, beállíthatók • Föl, le, oldalra lépkedhetünk a hierarchiában
URL leképzés • Web.config-ban kell definiálni • Könnyen megjegyezhető címek a bonyolult paraméteres címek helyett • Pontos egyezés estén a bejövő cím leképződik egy másik címre <?xmlversion="1.0" ?> <configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <system.web> <urlMappingsenabled="true"> <addurl="~/Category.aspx" mappedUrl="~/Default.aspx?category=default" /> <addurl="~/Autos.aspx" mappedUrl="~/Default.aspx?category=autos" /> </urlMappings> </system.web> </configuration>
Tartalom • Személyre szabhatóság • Felhasználói élmény • Mesteroldalak • Témák • Navigáció • Lokalizáció
Lokalizáció • Böngésző nyelvének automatikus felismerése • Címkék megadása • Lokális és globális erőforrás fájlok