I løpet av denne opplæringen ser vi på hvordan du lager et enkelt bilde arrangør som lar brukerne omordne en rekke bilder; Denne funksjonaliteten kan være nyttig på noen form for bildebasert nettsted der brukerne har en samling bilder som de har lastet opp eller på annen måte lagt til i profilen eller kontoen. Vi bruker .net for å hente og lagre rekkefølgen av bilder i en SQL-database på serveren, og jQuery brukergrensesnitt for å håndtere omorganisering av bildene på klienten.
Siden vi lager, vil være av typen aspx; Vi kan opprette og redigere disse filene med en enkel tekstredigerer om nødvendig, men det er langt mer effektivt å bruke en riktig .Net IDE. Visual Web Developer Express fra Microsoft er et flott. Net IDE, og det er helt gratis; Ta en kopi nå fra http://www.microsoft.com/express/Web/. Den kan lastes ned som en del av nettplattformen; Du kan velge en rekke forskjellige produkter når du laster ned den. I denne veiledningen bruker vi følgende komponenter:
Webplatformen er faktisk ganske bra, og gir deg tilgang til et bredt spekter av populære webapplikasjoner og rammer, som dotNetNuke, Joomla, Umbraco og mange andre, og plattforminstallatøren laster ned og konfigurerer alt du trenger. Det tar litt tid å laste ned og installere, så mens det gjør ting kan vi sette opp et utviklingsområde; lag en ny mappe og ring den image_organiser, så lag i denne mappen to nye mapper og ring dem js og css.
Du bør også ta en kopi av den nyeste versjonen av jQuery UI; Gå over til nedlastingsbyggeren på http://jqueryui.com/download og kontroller at følgende komponenter til venstre på siden er merket:
Et tema er ikke nødvendig, men sørg for versjon 1.8 er valgt til høyre på siden, og deretter trykker du nedlastningsknappen. Når arkivet har lastet ned, åpner du det og kopierer følgende filer fra js mappe i arkivet til js mappe vi nettopp har opprettet:
Vi benytter også Doug Crockfords utmerkede JSON-verktøy, som kan lastes ned fra http://www.JSON.org/json2.js. Lagre en kopi av denne filen til vår js mappe og sørg for å fjerne varselet fra toppen av filen.
Når plattforminstallatøren er ferdig, brann du opp Visual Web Developer Express og går til Fil " Åpent nettsted og velg deretter image_organiser prosjektmappe som vi nettopp har opprettet. Du får en rask spørring om du skal oppgradere nettstedet til å bruke .net 3.5; velge Ja.
Vi lager en ny database og tabell for dette eksempelet; åpne SQL Server Management Studio og koble til den lokale forekomsten av SQL Server (den kalles noe som Datamaskinnavn \ SQLExpress). For å opprette en ny database, høyreklikk på databaser mappe og velg Ny database. I dialogboksen som vises, angir databasenavnet til image_organiser og klikk deretter ok. Du bør da se den nye databasen som er oppført i venstre rute av lederen.
Vi må nå lage et nytt bord i vår nye database; utvide den nye databasen, høyreklikk deretter på tabeller mappe og velg Nytt bord. Administrasjonskonsollen vil gi deg et par ekstra paneler; en som viser tabellens kolonner og en som viser tabellegenskapene. Legg til tre kolonner i bordet, den første skal ha navnet src og være av typen varchar (50), den andre skal ha navnet alt og også være av typen varchar (50). Den endelige kolonnen kalles [rekkefølge] og er av typen int. Bare den alt kolonne skal tillate null verdier.
Klikk på diskikonet på verktøylinjen og velg navnet Bilder. Når du utvider tabeller mappe i Objekt Explorer til venstre bør den nye tabellen vises. I en full implementering vil hver bruker av programmet ha sitt eget sett med bilder, og det vil uten tvil være andre tabeller i databasen for brukernavn og passord og annen informasjon knyttet til brukeren. For formålet med denne opplæringen, tenk at vi er en enkelt autentisert bruker som manipulerer vårt eget sett med bilder.
Nå må vi fylle tabellen med noen data; høyreklikk på det nye bordet og velg Rediger topp 200 rader; Konsollen vil endres igjen, slik at du får et redigerbart bilde av bordet. en id kolonnen settes automatisk inn i tabellen I dette eksemplet har jeg bare brukt et nullbasert indeksnummer for verdiene i denne kolonnen, men dette bør samsvare med filnavnene til bildene som er i bruk. Bruk dataene som vises her:
For å opprette en ny aspx-side, høyreklikk roten til nettstedet i Solution Explorer til høyre for søknaden og velg Legg til nytt element. I dialogboksen som vises velger du Nettformular i toppseksjonen og Visual C # i Språk velg boks. Klikk Legg til.
Dette vil gi en ny side som heter default.aspx, som åpnes automatisk i IDE. Den nye siden er oppført i Solution Explorer til høyre og det har et plussikon ved siden av det som indikerer at det inneholder noe. For de av dere som aldri har jobbet med. Net før, inneholder den koden bak aspx.cs fil som vi kan bruke til å legge til server-side logikken for siden litt senere.
Aspx-filen vil ha noen elementer i den allerede, inkludert a ; legg til følgende kode i element:
Bilde arrangør
Ombestill bildene ved å dra et bilde til et nytt sted. Dine endringer blir lagret automatisk.
Vi har en enkel ytre beholder med to Vi bruker Etter dette har vi en klasses Definisjon og a Page_Load Event Handler som vi kan bruke til å utføre server-side kode når aspx siden laster. Innenfor denne hendelsen legger du til følgende kode: Koden er veldig rett frem, la oss gå gjennom det; vi definerer en ny SqlConnection bruker variabelen dbCon. Verdien av denne variabelen er forbindelsesstrengen vi bruker til å koble til databasen og består av servernavnet, brukernavnet (SA er standard), passord og database navn. Ikke glem å bytte ut ditt passord i koden ovenfor med passordet du angir når du installerer SQL. Neste definerer vi spørringen vår, som i dette tilfellet er bare å velge alt i databasen ved hjelp av * wildcard. Vi lagrer også SqlCommand i en variabel som består av spørringen og forbindelsen. Etter dette kan vi åpne forbindelsen med Åpen() metode og les dataene i a SqlDataReader variabel med ExecuteReader () metode kalt på SqlCommand. Til slutt binder vi dataene til vår repeaterkontroll ved å sette inn ds variabel som repeaterens Datakilde og ringer til DataBind () metode på det, før du endelig lukker databasetilkoblingen. Vi trenger ikke å velge repeaterkontrollen, vi kan bare referere til den direkte ved hjelp av ID Vi spesifiserte på aspx siden. Den første fasen av koden vår er nå fullført, repeateren vil vise en og for hver rad i vår database. Det vil se litt tørt ut på dette punktet, men la oss legge til noen grunnleggende styling. For å legge til et nytt stilark til nettstedet, høyreklikk på css mappe i Solution Explorer til høyre og velg Legg til nytt element; å velge Stilark i øverste rute i dialogboksen og sett inn Navn feltet til image_organiser.css, deretter treffer Legg til. Den nye filen åpnes automatisk i IDE; legg til følgende kode for det: Disse grunnleggende stilene legger bare ut siden i formatet vi vil ha for dette eksempelet. Det er ingenting veldig viktig her, noe av det kan lett endres for å passe andre krav. Ikke glem å lenke til det nye stilarket i av siden med følgende: På dette tidspunktet skal siden nå vises som dette når den først lastes i nettleseren: Du kan vise siden ved å høyreklikke aspx-filen i Solution Explorer og velge Se i nettleseren. Dette vil bruke IDEs innebygde webserver til å vise siden. Poenget til siden er å gjøre bildene sorterbare slik at brukeren kan ordne dem på nytt. For å gjøre dette må vi koble til jQuery UI-filene i vår js-mappe; legg til følgende tags directly before the closing tag: Å gjøre bildene sorterbare er ekstremt enkelt; etter det ovennevnte Alt vi gjør er å ringe sorterbar () metode på beholderen av elementene vi ønsker å kunne sortere. Vi leverer et konfigurasjonsobjekt til metoden som spesifiserer klassenavnet som skal brukes på det tomme sporet at elementet som sorteres, kan slippes inn ved hjelp av plassholder alternativ, og en tilbakeringingsfunksjon som skal utføres når en sortering oppstår, og rekkefølgen på elementene endres. Når vi kjører siden på dette punktet, bør vi oppdage at bildene er sorterbare og at vår ledig stiler brukes: Alt vi trenger å gjøre nå i hovedfilen .aspx, sendes den nye rekkefølgen av bildene til serveren når bildene sorteres. erstatte kommentaren i Oppdater tilbakeringing med følgende kode: ") .text (" Ny ordre lagret! ") .addClass (" suksess "). appendTo (" # left "); else $ (" ") .text (" Lagre mislyktes ") .addClass (" feil "). appendTo (" # left ");); La oss se på hva denne koden gjør; Først oppretter vi et par variabler som vi senere trenger i skriptet, den første er en matrise bokstavelig, den andre et objekt bokstavelig. Vi fjerner deretter eventuelle suksessmeldinger som kan være til stede fra tidligere sorteringsinteraksjoner. Vi behandler deretter hvert av bildene i bildegitteret ved hjelp av jQuery's Hver() metode som vil utføre den anonyme funksjonen vi spesifiserer en gang for hvert bilde i listen. Denne funksjonen passerer automatisk et indeksnummer for det nåværende elementet, som vi må benytte oss av. Innenfor denne funksjonen oppretter vi et nytt objekt bokstavelig og gir det to egenskaper; de id av det nåværende bildet, og indeksnummeret til gjeldende Hver() iterasjon. Vi legger da inn dette objektet i gruppen vi opprettet for øyeblikket. Når vi har gjort dette for hvert bilde på siden, setter vi inn arrayet i et innpakningsobjekt. Dette objektet sendes til serveren, som er gjort ved hjelp av jQuery's lavnivå Ajax () metode. Vi må bruke Ajax () metode i stedet for, si, post() eller getJSON () metoder, fordi vi må spesifisere innholdstype for at serveren skal kunne behandle dataene riktig. Vi stiller forespørselstypen til POST, spesifiser server-sidefilen med navnet på metoden som vil håndtere forespørselen som en forespørselsstrengparameter. Vi passerer også i vårt forberedte wrap-objekt. For å konvertere objektet fullt ut til JSON syntaks bruker vi stringify () metode av json2.js fil. Vi spesifiserer også en suksesshandler som vil bli utført når forespørselen er fullført. vi kan se strengen returnert av serveren ved å få tilgang til dataene som sendes tilbake til denne suksesshandleren. Den faktiske strengen vil være inneholdt i en egenskap av data objekt merket d. Data returnert til en side via AJAX i. Net er vanligvis tilgjengelig via a d objekt på denne måten. Vi kan legge til en annen melding og klassenavn til siden, avhengig av om serveren indikerer at forespørselen var en suksess eller feil. Du kan teste dette og se de forskjellige meldingene ved å bruke Firebug for å endre id Attributt av en av bildebeholdere til en verdi som ikke eksisterer i databasen, og deretter sortere et bilde. Slik viser våre meldinger: For å motta JSON-objektet som sendes til serveren via AJAX etter en sorteringsinteraksjon, kan vi bruke en asmx-fil; høyreklikk roten til nettstedet i Solution Explorer og velg Legg til nytt element. I dialogboksen som vises velger du Nettjeneste i toppseksjonen og Visual C # i Språk velg boks, og klikk deretter Legg til. Dette vil gi deg en ny WebService.asmx filen på nettstedet ditt, men koden bak for denne filen vil gå inn i en automatisk opprettet mappe som heter App_code. Vi trenger ikke å oppdatere asmx filen i det hele tatt, alt vil bli gjort i koden bak WebService.asmx.cs fil. Åpne den opp, og du vil se at det allerede er mye kode i filen; endre den slik at filen i sin helhet vises som følger: Vi må legge til flere navneområder i brukerdelen øverst i filen for å kunne jobbe med vår SQL-database. Vi må også sikre at vi uncomment linjen som tillater at vår webtjeneste blir kalt fra skriptet i hovedaspx-siden (det er tydelig merket med en kommentar i standardversjonen av filen). Innen Nettjeneste klasse må vi legge til en ny klasse som representerer hver av de indre objektene i gruppen som sendes til webtjenesten. Vi gjør dette med ImageDTO klasse og gi hvert objekt id og rekkefølge egenskaper og tilordne getter og setter metoder for å jobbe med verdiene av disse egenskapene. Neste kommer metoden som kalles fra vårt skript; de updateOrder web-metoden. Denne metoden mottar d objekt som vi kaster som en liste over ImageDTO objekter, Vi vil da kunne bruke metodene som er definert i vår klasse for å få tilgang til hver eiendom. Vi definerer tilkoblingsinformasjonen som trengs for å koble til vår database og deretter behandle hvert objekt i vår ImageDTO-listen. Vi trekker ut den nye ordren og id av bildet og bruk dette for å oppdatere rekkefølge kolonne for den tilsvarende raden i MSSQL-tabellen. Denne koden er relativt lik koden vi brukte for å få informasjonen ut av databasen på sidebelastning, vi bruker bare en annen tilkoblingsstreng og bruker ExecuteNonQuery () metode i stedet for ExecuteReader () fordi vi oppdaterer databasen i stedet for å bare lese fra den. Vi pakker også vår tilkobling i en prøv ... fange setning og enten utføre strengen mislyktes eller lagret avhengig av om oppdateringen lykkes. Vi brukte c # smaken av. Net kombinert med jQuery UI i denne opplæringen for å lage en side som husker rekkefølgen på bildene på den, og tillater bildene å bli omorganisert i henhold til lystene og begjærene til den besøkende til siden. I dette eksemplet er det en enkel side, men ikke glem at det ved en riktig implementering kun vil være tilgjengelig bare av den autentiserte brukeren; hver bruker vil ha tilgang til sine egne bilder og kunne sortere dem, mens bildene vil bli løst på den offentlig tilgjengelige versjonen av siden. Vi gjorde ingen sanitisering av dataene som ble sendt inn i server-sidefilen som oppdaterer databasen; Selv om brukeren ikke oppgir dataene i et tekstfelt, kan den utgående forespørselen fra siden lett bli manipulert for å sende skadelig kode til serveren. Faren for denne typen angrep ville være begrenset, da vi sannsynligvis bare ville tillate sortering i utgangspunktet til registrerte, autentiserte brukere. Selv om sikkerhet er utenfor omfanget av denne opplæringen, bør det alltid være en primær bekymring når det gjelder live kode.bruker System.Data; bruker System.Data.SqlClient;
// definere tilkobling SqlConnection dbCon = ny SqlConnection ("Server = DESKTOP \\ SQLEXPRESS; UID = sa; PWD = din_password; Database = image_organiser"); // definere søkeordet sSQL = "Velg * fra bilder"; // definere kommando SqlCommand cmd = new SqlCommand (sSQL, dbCon); // åpen tilkobling dbCon.Open (); // les data SqlDataReader ds = cmd.ExecuteReader (); // bind til repeater imageRepeat.DataSource = ds; imageRepeat.DataBind (); // Lukk forbindelse dbCon.Close ();
Styling the Page
#outerWrap width: 1004px; margin: auto; stilling: i forhold; background-color: #eee; grense: 1px solid # 999; #outerWrap: etter innhold: "."; display: block; synlighet: skjult; klar: begge; h1 skrift: kursiv normal 24px Georgia, Serif; tekst-Justering: center; margin: 10px 0; p margin: 0; font: 12px Arial, Sans-serif; polstring: 0 10px; #left width: 218px; float: venstre; #images margin: 0; padding: 0; float: venstre; bredde: 786px; #images li listestil-type: none; float: venstre; Markøren: flytter; margin: 10px 10px 0 0; bredde: 250px; høyde: 250 px; grense: 1px solid # 999; #images .vacant border: 3px dotted # 66d164; bredde: 246px; høyde: 246px; background-color: #fff; .success, .failure margin: 0 0 0 10px; polstring: 4px 0 4px 26px; stilling: absolutt; bunn: 18 piksler; font-vekt: bold; .success background: url ('... /img/tick.png') no-repeat 0 1px; color: # 12751c; .failure background: url ('... /img/cross.png') no-repeat 0 0; color: # 861b16;
Gjøre bildene sorterbare
Lagre den nye bestillingen
// lage vars var orderArray = [], wrap = ; / / tilbakestill 'lagret' melding $ ("suksess", $ ("# venstre")). fjern (); // prosess hvert bilde $ ("# images img"). hver (funksjon (i) // bygge img objekt var imgObj = "id": $ (dette) .parent (). attr ("id"). split ("_") [1], "rekkefølge": i + 1; // legge til objekt i array orderArray.push (imgObj);); // pakke inn objekt wrap.d = orderArray; // pass til server $ .ajax (type: "POST", url: "WebService.asmx / updateOrder", data: JSON.stringify (wrap), contentType: "application / json; charset = utf-8" : funksjon (data) if (data.d === "saved") $ ("
Den aktive servermetoden filen
bruker system; bruker System.Collections.Generic; bruker System.Data; bruker System.Data.SqlClient; bruker System.Linq; bruker System.Web; bruker System.Web.Services; bruker System.Web.Script.Services; ///
Sammendrag