Nel corso di questo tutorial vedremo come creare un semplice organizzatore di immagini che consenta agli utenti di riordinare una serie di immagini; questa funzionalità potrebbe essere utile su qualsiasi tipo di sito basato su immagini in cui gli utenti dispongano di una raccolta di immagini che hanno caricato o altrimenti aggiunto al proprio profilo o account. Useremo .net per recuperare e memorizzare l'ordine delle immagini in un database SQL sul server e l'interfaccia utente di jQuery per gestire il riordino delle immagini sul client.
La pagina che creeremo sarà del tipo aspx; possiamo creare e modificare questi file con un semplice editor di testo, se necessario, ma è molto più efficiente utilizzare un IDE .Net corretto. Visual Web Developer Express di Microsoft è un ottimo IDE .Net ed è completamente gratuito; prendi una copia ora da http://www.microsoft.com/express/Web/. Può essere scaricato come parte della piattaforma Web; puoi scegliere una gamma di prodotti diversi al momento del download, per gli scopi di questo tutorial utilizzeremo i seguenti componenti:
La piattaforma Web è in realtà piuttosto buona e ti dà accesso a una vasta gamma di applicazioni e framework web popolari, come dotNetNuke, Joomla, Umbraco e molti altri, e il programma di installazione della piattaforma scarica e configura tutto ciò che ti serve. Ci vorrà un po 'di tempo per scaricarlo e installarlo, quindi mentre sta facendo il suo compito possiamo creare un'area di sviluppo; crea una nuova cartella e chiamala image_organiser, quindi all'interno di questa cartella crea due nuove cartelle e chiamale js e css.
Dovresti anche prendere una copia dell'ultima versione dell'interfaccia utente di jQuery; andare al builder di download all'indirizzo http://jqueryui.com/download e assicurarsi che i seguenti componenti alla sinistra della pagina siano controllati:
Un tema non è richiesto ma assicurati versione 1.8 viene selezionato a destra della pagina e quindi viene premuto il pulsante di download. Una volta scaricato l'archivio, aprilo e copia i seguenti file dal js cartella nell'archivio al js cartella che abbiamo appena creato:
Facciamo anche uso dell'eccellente utility JSON di Doug Crockford, che può essere scaricata da http://www.JSON.org/json2.js. Salva una copia di questo file sul nostro js cartella e assicurarsi di rimuovere l'avviso dalla parte superiore del file.
Una volta terminato il programma di installazione della piattaforma, avviare Visual Web Developer Express e andare a File " Apri sito Web e quindi scegliere il image_organiser cartella del progetto che abbiamo appena creato. Verrà richiesto di aggiornare il sito per utilizzare .net 3.5; scegliere sì.
Creeremo un nuovo database e una tabella per questo esempio; aprire SQL Server Management Studio e connettersi all'istanza locale di SQL Server (verrà chiamato qualcosa di simile COMPUTERNAME \ SQLEXPRESS). Per creare un nuovo database, fare clic con il tasto destro del mouse su Banche dati cartella e scegliere Nuovo database. Nella finestra di dialogo che appare, imposta il nome del Database su image_organiser e quindi fare clic Ok. Dovresti quindi vedere il nuovo database elencato nel pannello di sinistra del gestore.
Ora dobbiamo creare una nuova tabella all'interno del nostro nuovo database; espandere il nuovo database, quindi fare clic con il tasto destro del mouse su tabelle cartella e scegliere Nuovo tavolo. La console di gestione ti fornirà un paio di pannelli aggiuntivi; una mostra le colonne della tabella e una mostra le proprietà della tabella. Aggiungi tre colonne alla tabella, la prima dovrebbe avere il nome src ed essere di tipo varchar (50), il secondo dovrebbe avere il nome alt e anche essere di tipo varchar (50). La colonna finale è chiamata [ordine] ed è del tipo int. Solo il alt colonna dovrebbe consentire nullo valori.
Fai clic sull'icona del disco sulla barra degli strumenti e scegli il nome immagini. Quando espandi il tabelle cartella nel Esplora oggetti a sinistra, dovrebbe essere elencata la nuova tabella. In un'implementazione completa, ogni utente dell'applicazione avrebbe il proprio set di immagini e ci sarebbero senza dubbio altre tabelle nel database per nomi utente e password e altre informazioni associate all'utente. Ai fini di questo tutorial, immagina di essere un singolo utente autenticato che manipola il nostro set di immagini.
Ora abbiamo bisogno di popolare la tabella con alcuni dati; tasto destro del mouse sulla nuova tabella e scegliere Modifica le prime 200 righe; la console cambierà di nuovo in modo da avere una vista modificabile della tabella. Un id la colonna viene inserita automaticamente nella tabella; in questo esempio ho semplicemente utilizzato un numero di indice a base zero per i valori in questa colonna, ma questo dovrebbe corrispondere ai nomi di file delle immagini in uso. Usa i dati mostrati qui:
Per creare una nuova pagina aspx, fare clic con il pulsante destro del mouse sulla radice del sito in Esploratore di soluzioni a destra dell'applicazione e scegliere Aggiungi un nuovo elemento. Nella finestra di dialogo che appare scegli Modulo Web nella parte superiore e Visual C # nel linguaggio seleziona la casella. Clic Inserisci.
Questo darà una nuova pagina chiamata Default.aspx, che si aprirà automaticamente nell'IDE. La nuova pagina è elencata nel Esploratore di soluzioni a destra e ha accanto un'icona più che indica che contiene qualcosa. Per quelli di voi che non hanno mai lavorato con .Net prima, contiene il code-behind aspx.cs file che possiamo usare per aggiungere la logica lato server per la pagina un po 'più tardi.
Il file aspx avrà già alcuni elementi al suo interno, tra cui a ; aggiungi il seguente codice all'interno di elemento:
Organizzatore di immagini
Riordina le immagini trascinando un'immagine in una nuova posizione. Le tue modifiche saranno salvate automaticamente.
Abbiamo un semplice contenitore esterno con due Noi usiamo il Seguendo questo abbiamo una definizione di classe e a Page_Load gestore di eventi che possiamo usare per eseguire codice lato server quando viene caricata la pagina di aspx. All'interno di questo gestore di eventi aggiungere il seguente codice: Il codice è molto semplice, percorriamolo; definiamo un nuovo SqlConnection usando la variabile dbCon. Il valore di questa variabile è la stringa di connessione che usiamo per connettersi al database e consiste nel nome del server, nome utente (sa è il valore predefinito), password e nome del database. Non dimenticare di sostituire la tua password nel codice precedente con la password che hai impostato durante l'installazione di SQL. Quindi definiamo la nostra query, che in questo caso è solo per selezionare tutto nel database utilizzando il * jolly. Conserviamo anche il SqlCommand in una variabile che consiste nella query e nella connessione. Seguendo questo possiamo quindi aprire la connessione con il Aperto() metodo e leggere i dati in a SqlDataReader variabile con il ExecuteReader () metodo chiamato sul SqlCommand. Infine leghiamo i dati al nostro controllo ripetitore impostando il ds variabile come il ripetitore Fonte di dati e chiamando il DataBind () metodo su di esso, prima di chiudere definitivamente la connessione al database. Non abbiamo bisogno di selezionare il controllo del ripetitore, possiamo semplicemente riferirci direttamente usando il ID abbiamo specificato nella pagina di aspx. La prima fase del nostro codice è ora completa, il ripetitore visualizzerà un e per ogni riga del nostro database. A questo punto sembrerà un po 'insipido, quindi aggiungiamo un po' di stile di base. Per aggiungere un nuovo foglio di stile al sito, fare clic con il tasto destro del mouse su css cartella nel Esploratore di soluzioni a destra e scegli Aggiungi un nuovo elemento; selezionare Foglio di stile nel pannello superiore della finestra di dialogo e impostare il Nome campo a image_organiser.css, poi colpisci Inserisci. Il nuovo file si aprirà automaticamente nell'IDE; aggiungi il seguente codice: Questi stili di base non fanno altro che stendere la pagina nel formato che vogliamo per questo esempio. Non c'è nulla di veramente importante qui, potrebbe essere facilmente modificato per soddisfare altre esigenze. Non dimenticare di collegarti al nuovo foglio di stile in della pagina con il seguente: A questo punto, la pagina dovrebbe apparire così quando viene caricata per la prima volta nel browser: È possibile visualizzare la pagina facendo clic con il pulsante destro del mouse sul file aspx in Esploratore di soluzioni e scegliendo Visualizza nel browser. Questo userà il server web integrato dell'IDE per visualizzare la pagina. Il punto della pagina è di rendere le immagini ordinabili in modo che l'utente possa riordinarle, per fare ciò dobbiamo collegarci ai file dell'interfaccia utente jQuery nella nostra cartella js; aggiungi il seguente tags directly before the closing tag: Rendere le immagini ordinabili è estremamente facile; dopo quanto sopra Tutto ciò che facciamo è chiamare il ordinabile() metodo sul contenitore degli articoli che vorremmo poter ordinare. Forniamo un oggetto di configurazione al metodo che specifica il nome della classe che deve essere applicato allo slot vuoto che l'oggetto che si sta ordinando può essere lasciato cadere in segnaposto opzione e una funzione di callback che deve essere eseguita ogni volta che si verifica un ordinamento e l'ordine degli elementi cambia. Quando eseguiremo la pagina a questo punto, dovremmo scoprire che le immagini sono ordinabili e quelle nostre vacante gli stili sono applicati: Tutto quello che dobbiamo fare ora nel file .aspx principale è inviare il nuovo ordine delle immagini al server ogni volta che le immagini vengono ordinate; sostituire il commento nel aggiornare callback con il seguente codice: "). text (" Nuovo ordine salvato! ") .addClass (" successo "). appendTo (" # left "); else $ (" ") .text (" Save failed ") .addClass (" failure "). appendTo (" # left ");); Diamo un'occhiata a cosa fa questo codice; per prima cosa creiamo un paio di variabili di cui avremo bisogno in seguito nello script, il primo è un array letterale, il secondo un oggetto letterale. Quindi rimuoviamo tutti i messaggi di successo che possono essere presenti dalle precedenti interazioni di ordinamento. Elaboriamo quindi ciascuna delle immagini nella griglia dell'immagine utilizzando jQuery ogni() metodo, che eseguirà la funzione anonima che specifichiamo una volta per ogni immagine nell'elenco. Questa funzione viene automaticamente passata un numero di indice per l'articolo corrente, che dobbiamo utilizzare. All'interno di questa funzione creiamo un nuovo oggetto letterale e gli diamo due proprietà; il id dell'immagine corrente e il numero di indice della corrente ogni() iterazione. Quindi inseriamo questo oggetto nell'array che abbiamo creato un momento fa. Una volta fatto questo per ogni immagine sulla pagina, inseriamo la matrice in un oggetto di avvolgimento. Questo oggetto verrà passato al server, che viene eseguito utilizzando il livello basso di jQuery ajax () metodo. Dobbiamo usare il ajax () metodo invece di, ad esempio, il inviare() o getJSON () metodi, perché abbiamo bisogno di specificare il tipo di contenuto in modo che il server elabori correttamente i dati. Impostiamo il tipo di richiesta a INVIARE, specificare il file sul lato server con il nome del metodo che gestirà la richiesta come parametro della stringa di query. Passiamo anche nel nostro oggetto wrapper preparato. Per convertire completamente l'oggetto in sintassi JSON usiamo il stringa i () metodo del json2.js file. Specifichiamo anche un gestore di successo che verrà eseguito una volta completata la richiesta; possiamo vedere la stringa restituita dal server accedendo ai dati passati a questo gestore di successo. La stringa effettiva sarà contenuta in una proprietà del dati oggetto etichettato d. I dati restituiti a una pagina tramite AJAX in .Net è generalmente accessibile tramite a d oggetto in questo modo. Possiamo aggiungere un messaggio e un nome di classe diversi alla pagina a seconda che il server indichi che la richiesta è stata un successo o un fallimento. Puoi testarlo e vedere i diversi messaggi usando Firebug per cambiare il id attributo di uno dei contenitori immagine a un valore che non esiste nel database e quindi all'ordinamento di un'immagine. Ecco come dovrebbero apparire i nostri messaggi: Per ricevere l'oggetto JSON passato al server tramite AJAX dopo un'interazione di ordinamento, possiamo usare un file asmx; fare clic con il tasto destro del mouse sulla radice del sito in Esploratore di soluzioni e scegliere Aggiungi un nuovo elemento. Nella finestra di dialogo che appare scegli Servizio web nella parte superiore e Visual C # nel linguaggio selezionare la casella, quindi fare clic Inserisci. Questo ti darà un nuovo WebService.asmx file nel tuo sito, ma il code-behind per questo file andrà in una cartella creata automaticamente chiamata App_Code. Non è necessario aggiornare il file asmx, tutto verrà eseguito nel code-behind WebService.asmx.cs file. Aprilo e vedrai che c'è già molto codice nel file; cambiala in modo che il file nella sua interezza appaia come segue: Abbiamo bisogno di aggiungere diversi namespace alla sezione using nella parte superiore del file per lavorare con il nostro database SQL. Dovremo inoltre rimuovere il commento dalla linea che consente al nostro servizio Web di essere chiamato dallo script nella pagina principale di aspx (è chiaramente contrassegnato con un commento nella versione predefinita del file). All'interno del Servizio web classe abbiamo bisogno di aggiungere una nuova classe che rappresenta ciascuno degli oggetti interni all'interno della matrice passata al servizio web. Lo facciamo con il ImageDTO classe e dare ogni oggetto id e ordine proprietà e assegnare metodi getter e setter per lavorare con i valori di queste proprietà. Poi viene il metodo che viene chiamato dal nostro script; il updateOrder metodo web. Questo metodo riceve il d oggetto che abbiamo lanciato come elenco di ImageDTO oggetti; potremo quindi utilizzare i metodi definiti nella nostra classe per accedere a ciascuna proprietà. Definiamo le informazioni di connessione necessarie per connettersi al nostro database e quindi elaborare ogni oggetto nel nostro Elenco ImageDTO. Estraiamo il nuovo ordine e il id dell'immagine e usarla per aggiornare il ordine colonna per la riga corrispondente nella tabella MSSQL. Questo codice è relativamente simile al codice che abbiamo usato per ottenere le informazioni dal database al caricamento della pagina, usiamo solo una stringa di connessione diversa e usiamo il ExecuteNonQuery () metodo invece di ExecuteReader () perché stiamo aggiornando il database invece di limitarci a leggerlo. Inoltre, avvolgiamo la nostra esecuzione della connessione in a prova a prendere dichiarazione e l'output della stringa mancato o salvato a seconda se l'aggiornamento ha esito positivo. Abbiamo usato il sapore c # di .Net combinato con l'interfaccia utente di jQuery in questo tutorial per creare una pagina che ricorda l'ordine delle immagini su di esso e consente di riordinare le immagini secondo i capricci e i desideri del visitatore alla pagina. In questo esempio è una pagina semplice ma non dimenticare che in una corretta implementazione questo sarebbe probabilmente accessibile solo dall'utente autenticato; ogni utente avrebbe accesso alle proprie immagini ed essere in grado di ordinarle, mentre le immagini sarebbero fissate sulla versione pubblicamente accessibile della pagina. Non abbiamo effettuato alcuna sanificazione dei dati passati nel file sul lato server che aggiorna il database; sebbene l'utente non inserisca i dati in un campo di testo, la richiesta in uscita dalla pagina potrebbe essere facilmente manipolata per inviare codice dannoso al server. Il pericolo di questo tipo di attacco sarebbe limitato poiché probabilmente permetteremo solo l'ordinamento in primo luogo agli utenti registrati e autenticati. Sebbene la sicurezza esuli dallo scopo di questo tutorial, dovrebbe sempre essere una preoccupazione primaria quando si ha a che fare con codice live.usando System.Data; using System.Data.SqlClient;
// define connection SqlConnection dbCon = new SqlConnection ("Server = DESKTOP \\ SQLEXPRESS; UID = sa; PWD = tua_password; Database = image_organiser"); // define query string sSQL = "Seleziona * da immagini"; // define command SqlCommand cmd = new SqlCommand (sSQL, dbCon); // apre la connessione dbCon.Open (); // legge i dati SqlDataReader ds = cmd.ExecuteReader (); // associa al ripetitore imageRepeat.DataSource = ds; imageRepeat.DataBind (); // chiudi connessione dbCon.Close ();
Disegnare la pagina
#outerWrap width: 1004px; margin: auto; position: relative; background-color: #eee; border: 1px solid # 999; #outerWrap: after content: "."; blocco di visualizzazione; visibility: hidden; clear: both; h1 font: italic normal 24px Georgia, Serif; text-align: center; margine: 10px 0; p margin: 0; font: 12px Arial, Sans-serif; padding: 0 10px; #left width: 218px; float: sinistra; #images margin: 0; padding: 0; float: sinistra; larghezza: 786px; #images li list-style-type: none; float: sinistra; cursore: spostare; margine: 10px 10px 0 0; larghezza: 250px; altezza: 250px; border: 1px solid # 999; #images .vacant border: 3px punteggiato # 66d164; larghezza: 246px; altezza: 246px; background-color: #fff; .success, .failure margin: 0 0 0 10px; imbottitura: 4px 0 4px 26px; position: absolute; bottom: 18px; font-weight: 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;
Rendere le immagini ordinabili
Salvataggio del nuovo ordine
// crea vars var orderArray = [], wrap = ; // resetta il messaggio 'salvato' $ (". successo", $ ("# sinistra")). remove (); // processa ogni immagine $ ("# images img"). each (function (i) // build img object var imgObj = "id": $ (this) .parent (). attr ("id"). split ("_") [1], "order": i + 1; // aggiungi oggetto a array orderArray.push (imgObj);); // wrap in object wrap.d = orderArray; // passa al server $ .ajax (tipo: "POST", url: "WebService.asmx / updateOrder", dati: JSON.stringify (wrap), contentType: "application / json; charset = utf-8", successo : function (data) if (data.d === "saved") $ ("
Il file del metodo Active Server
usando il sistema; using System.Collections.Generic; usando System.Data; using System.Data.SqlClient; using System.Linq; usando System.Web; utilizzando System.Web.Services; utilizzando System.Web.Script.Services; ///
Sommario