520 likes | 886 Views
ASP.NET 3.5 – Uudet ominaisuudet Jani Järvinen, C# MVP Technical Manager, Software Dev. Moonsoft Oy. Agenda. Kaksi esitystä, lounas välissä Osa 1, käyttöliittymät Uudet kontrollit Osa 2, AJAX ja tietokannat AJAX-ominaisuudet LINQ. Mitä uutta ASP.NET 3.5:ssä?. Yleiskatsaus uutuuksiin.
E N D
ASP.NET 3.5 – Uudet ominaisuudet Jani Järvinen, C# MVP Technical Manager, Software Dev. Moonsoft Oy
Agenda • Kaksi esitystä, lounas välissä • Osa 1, käyttöliittymät • Uudet kontrollit • Osa 2, AJAX ja tietokannat • AJAX-ominaisuudet • LINQ
Yleiskatsaus uutuuksiin • Uusia kontrolleja • ListView ja DataPager • Uusia nimiavaruuksia • System.Web.Extensions-koonnissa • Sisäkkäiset mallisivut • Tuki Visual Studiossa, viimeinkin • AJAX-tuki
Lisää uutuuksia • Tietokantayhteydet • LINQ-tuki • LinqDataSource-kontrolli • IIS 7.0 -integrointi • Käyttäjäntunnistus ja välimuisti käytettävissä kaikilla tiedostotyypeillä
Työkaluja • ASP.NET Merge Tool • Aspnet_merge.exe • Kääntää web-projektista yhden tai useamman koonnin
Laajennuksista .NET 3.5:een • Aiemmista erillisosistaja laajennuksistatullut osa.NET 3.5:ttä • Vihreät ja punaisetbitit
Komponenttihistoriaa • ASP.NET 1.1 • Repeater • DataGrid • DataList • ASP.NET 2.0 • GridView • FormView • ASP.NET 3.5 • ListView • DataPager
Miksi uusia kontrolleja? • ListView • Monipuolisemmat tarpeet • Ei pelkkiä taulukkoja • ”Point & click” • DataPager • Helpompi sivutus
ListView-kontrolli • System.Web.UI.WebControls.ListView • Yhdistää grid- ja Repeater-kontrollien ominaisuuksia • Voi olla täysinCSS-pohjainen,ei HTML:ntable-elementtiä • Tukee myös tietojen muokkausta
Mallit (templates) • ListView tarvitsee toimiakseen mallipohjia • ItemTemplate • Toistaa rivit esim. tietokannasta • Tarvitaan kontrolli, jonka ID="itemPlaceHolder" • LayoutTemplate • Määrittää ulkoasun • EditTemplate • Muokkaamista varten
Esimerkki mallista <asp:ListView ID="ListView1" runat="server"> <LayoutTemplate> <ul> <asp:PlaceHolder ID="itemPlaceHolder” runat="server" /> </ul> </LayoutTemplate> <ItemTemplate> <li> <%# Eval("ID") %>: <%# Eval("Name") %></li> </ItemTemplate> </asp:ListView>
Muokkausominaisuudet • EditItemTemplate-malli • Määrittelee mallin, jonka mukaan muokkaus tapahtuu • Eval-metodin sijaan käydä Bindia • <%# Bind(”Name") %> • Määrittele ItemEditing-tapahtumankäsittelijä • Aseta EditIndex • Tee DataBind()
Komennot ja tapahtumat • ListView-kontrollinen yhteyteen tarvitaan painikkeita • Painikkeiden CommandName-ominaisuus • Edit, Insert, Delete • Update, Cancel • Toteuta Item*ing-tapahtumat • Esim. ItemUpdating, ItemEditing • Paluu katselutilaan • EditIndex = -1
Valinta (selection) • SelectedItemTemplate • Määrittää, miten valittu rivi (tms.) näytetään • SelectedIndex-ominaisuus • Lue tai aseta valittu rivi • Aina suhteellinen näkymään, ei tietolähteeseen • Tapahtumat • SelectedIndexChanging • SelectedIndexChanged
Lajittelu (sorting) • ListView-kontrolli tukee myös tietojen lajittelua • Kutsu vain Sort-metodia • Parametreina lajiteltava sarake ja suunta • Paluu normaaliin: lajiteltava sarake = ”” • Vaihtoehtona esim. LinkButton • CommandName = ”Sort” • CommandArgument=”sarakkeen nimi” • Tapahtumat • Sorting, Sorted
Muita mahdollisuuksia • Ryhmittely • GroupTemplate • GroupItemCount • Ulkoasu • LayoutTemplate • Sivutus-mahdollisuus • EmptyItem/EmptyDataTemplate
DataPager-komponentti • Mahdollistaa sivutustoiminnot • Voidaan yhdistää muihin kontrolleihin • Esim. ListView jne. • Kaksi päätyyliä • Numerot • Painikkeet
Sivutustoiminnallisuus • PagedControlID • Mikä kontrolli sivutetaan • PageSize • Montako elementtiä per sivu • Painike- tai numerokomponentit • NextPreviousPagerField • NumericPagerField • Tai sekä että
Esimerkki DataPagerista <asp:DataPager ID="DataPager1" PagedControlID="ListView1” runat="server"> <Fields> <asp:NextPreviousPagerField ButtonType="Button“ ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" /> <asp:NumericPagerField /> <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" /> </Fields> </asp:DataPager>
IPageableItemContainer • Rajapinta sivutukselle • ListView-kontrolli toteuttaa • SetPageProperties-metodi • Kutsutaan aina, kun sivutettava kontrollin sivua on tarpeen vaihtaa • Toteutettavissa itsekin
Siirtyminen sivulta toiselle • Oletusarvoisesti DataPager-kontrolli käyttää POST-metodia • javascript:__doPostBack('DataPager1$ctl01','') • Vaihtoehtoisesti voidaan käyttää myös GET-metodia • QueryStringField-ominaisuus • http://firma.fi/DataPager.aspx?mun_oma=2 • Painikkeet vaihtuvat linkeiksi
Uusi koonti (assembly) • System.Web.Extensions.dll • Monia uusia nimi-avaruuksia • Monet liittyvät WCF:ään • AJAX-toteutukset • Esim. JavaScript serializer • System.Web.UI.WebControls
Missä mennään tänään • Paljon puhetta, vähän tekoja? • Onko AJAXille aidosti tarvetta? • Voitko kehittää moderneja sovelluksia ilman AJAXia?
Visual Studio & .NET 3.5 • AJAX-kontrollit kaikkien käyttöön • Ei enää erillisiä laajennuksia • Helppo ottaakäyttöön omissaASP.NET-sovelluksissa
Alkuun AJAX-toteutuksissa • Kaksi komponenttia • ScriptManager • Update Panel • Yksi ScriptManager per sivu • Koodia voidaankirjoittaa kutenennenkin
UpdateProgress-kontrolli • Näyttää käyttäjälle, että jotain tapahtuu • Tarvitaan • ProgressTemplate • Pätkä HTML-koodia, joka näytetään • AssociatedUpdatePanelID • Mihin paneeliin toiminto liitty • DisplayAfter • Aikaraja, oletus 0,5 sekuntia • Ei tarvitse olla UpdatePanelin sisällä
Esimerkki <asp:UpdateProgress ID="UpdateProgress1” runat="server" AssociatedUpdatePanelID="UpdatePanel1” DisplayAfter="2000"> <ProgressTemplate> <b>Hetki pieni...</b> </ProgressTemplate> </asp:UpdateProgress>
AJAX ControlToolkit • Tarjoaa joukon valmiita kontrolleja • Laajentaa Visual Studion ja .NET 3.5:n vakiotarjontaa • Maksuton, lähdekoodi saatavilla • Lataa • www.asp.net/ajax/download
Laajennukset (extenders) • Muokkaavat valmiiden komponenttien toiminnallisuutta • Esim. ConfirmButton • System.Web.UI.ExtenderControl • Katso • ”Adding ASP.NET AJAX Client Behaviors to Web Server Controls”
Uusia ominaisuuksia • Visual Studio 2008 tuomukanaan uusiaJavaScript-ominaisuuksia • IntelliSense-tuki • Omien luokkiendokumentointi-mahdollisuus • XML-dokumentaatiotamyös JavaScript-koodiin
Esimerkki • Huomaa, että XML-dokumentit on kirjoitettava metodin lohkon sisään! function SayHello(name){ /// <summary>This method returns a string saying Hello, World!</summary> /// <param name="name" type="string">Specifies the name to send greetings to.</param> return "Hello, "+name+"!";}
LINQ – pikakertaus • Uusi tapa käsitellä erilaisia tietolähteitä yhdellä tavalla, suoraan ohjelmointikielen syntaksia käyttäen • Tuettuina: • omat oliot • XML-tiedostot • DataSet-tietovarasto • SQL Server -tietokannat
Pikaesimerkki: omat oliot int[] numbers = { 3, 6, 2, 9, 12, 7, 4, 5, 11 }; var bigNumbers = from n in numbers where n > 5 select n; foreach (int bigNum in bigNumbers) { … }
LINQ ja SQL Server • .NET 3.5 sisältääyksinkertaisenoliomapperinSQL Serverille • O/R Mapper • Lisää projektiin”LINQ to SQLClasses” -malli
Esimerkki SQL-kyselystä PhotosDataContext context = new PhotosDataContext(); var albums = from album in context.Albums orderby album.Name select album; StringBuilder buffer = new StringBuilder(); foreach (var album in albums) { string name = album.Name; buffer.AppendLine(name + "<br />"); } Label1.Text = buffer.ToString();
LinqDataSource-kontrolli • Tarjoaa web-sovelluksille helpon tavan viitata LINQ-tietolähteisiin • Projektiin on oltava jo lisätty LINQ-luokkia kuten edellä • Visual Studio näkee projektin DataContext-oliot • Käy tietolähteeksinormaalistiesim. ListView-ja GridView-kontrolleille
Ominaisuuksia • ContextTypeName • Tietolähden LINQ-kyselyille • TableName • Mistä taulusta haetaan tietoja • Select, Where, OrderBy • Lähdekoodikieliset ehtolauseet • Ota AutoGenerate*-ominaisuudet pois päältä
Esimerkki <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="AlbumID" DataSourceID="LinqDataSource1"> <Columns> … </Columns> </asp:GridView> <asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="WebAppDemo.PhotosDataContext" TableName="Albums"> </asp:LinqDataSource>
Where-ehto <asp:LinqDataSource ID="LinqDataSource1" runat="server” ContextTypeName="WebAppDemo.PhotosDataContext" TableName="Albums" AutoGenerateWhereClause="True"> <WhereParameters> <asp:ControlParameter Name="AlbumID" ControlID="DropDownList1" Type="Int32" /> </WhereParameters> </asp:LinqDataSource>