Une interface utilisateur jQuery et un organisateur d'images .Net

Au cours de ce didacticiel, nous verrons comment créer un simple organiseur d'images permettant aux utilisateurs de réorganiser une série d'images. cette fonctionnalité peut être utile sur tout type de site basé sur des images où les utilisateurs ont une collection d'images qu'ils ont téléchargées ou autrement ajoutées à leur profil ou à leur compte. Nous utiliserons .net pour récupérer et stocker l'ordre des images dans une base de données SQL sur le serveur, et jQuery UI pour gérer la réorganisation des images sur le client..


Commencer

La page que nous créons sera du type aspx; nous pouvons créer et éditer ces fichiers avec un simple éditeur de texte si nécessaire, mais il est bien plus efficace d'utiliser un IDE .Net approprié. Visual Web Developer Express de Microsoft est un excellent IDE .Net totalement gratuit. prenez-en un exemplaire maintenant sur http://www.microsoft.com/express/Web/. Il peut être téléchargé dans le cadre de la plate-forme Web. vous pouvez choisir une gamme de produits différents lorsque vous le téléchargez. Pour les besoins de ce tutoriel, nous utiliserons les composants suivants:

  • Visual Web Developer Express 2008
  • SQL Server Express 2008 (avec SQL Server 2008 Management Studio Express)

La plate-forme Web est en fait plutôt bonne et vous donne accès à un large éventail d'applications et de cadres Web populaires, tels que dotNetNuke, Joomla, Umbraco et bien d'autres. L'installateur de la plate-forme télécharge et configure tout ce dont vous avez besoin. Le téléchargement et l’installation prendront un peu de temps. Par conséquent, nous pouvons mettre en place un domaine de développement. créer un nouveau dossier et l'appeler image_organiser, puis dans ce dossier, créez deux nouveaux dossiers et appelez-les js et css.

Vous devriez également vous procurer une copie de la dernière version de jQuery UI; rendez-vous sur le générateur de téléchargement à l'adresse http://jqueryui.com/download et assurez-vous que les composants suivants figurent à gauche de la page:

  • Coeur
  • Widget
  • Souris
  • Triable

Un thème n'est pas obligatoire mais assurez-vous version 1.8 est sélectionné à droite de la page puis cliquez sur le bouton de téléchargement. Une fois l’archive téléchargée, ouvrez-la et copiez les fichiers suivants du répertoire js dossier dans les archives à la js dossier que nous venons de créer:

  • jquery-1.4.2.min.js
  • jquery-ui-1.8.custom.min.js

Nous utilisons également l'excellent utilitaire JSON de Doug Crockford, qui peut être téléchargé à partir de http://www.JSON.org/json2.js. Enregistrer une copie de ce fichier dans notre js dossier et veillez à supprimer l'alerte en haut du fichier.

Une fois le programme d'installation de la plate-forme terminé, lancez Visual Web Developer Express et accédez à Fichier " Ouvrir le site Web puis choisissez le image_organiser dossier de projet que nous venons de créer. Vous recevrez une invite vous demandant si vous souhaitez mettre à niveau le site pour utiliser .net 3.5; choisir Oui.


Création d'une base de données

Nous allons créer une nouvelle base de données et une table pour cet exemple; ouvrez SQL Server Management Studio et connectez-vous à l’instance locale de SQL Server (on l’appellera comme ORDINATEUR \ SQLEXPRESS). Pour créer une nouvelle base de données, cliquez avec le bouton droit de la souris sur le bouton Bases de données dossier et choisissez Nouvelle base de données. Dans la boîte de dialogue qui apparaît, définissez le nom de la base de données sur image_organiser puis cliquez sur D'accord. La nouvelle base de données devrait alors apparaître dans le volet gauche du gestionnaire..

Nous devons maintenant créer une nouvelle table dans notre nouvelle base de données; développez la nouvelle base de données, puis cliquez avec le bouton droit de la souris sur les tables dossier et choisissez Nouvelle table. La console de gestion vous fournira quelques panneaux supplémentaires. une affiche les colonnes de la table et une affiche les propriétés de la table. Ajoutez trois colonnes à la table, la première devrait avoir le nom src et être de type varchar (50), le second devrait avoir le nom alt et aussi être de type varchar (50). La dernière colonne s'appelle [ordre] et est du type int. Seulement le alt colonne devrait permettre nul valeurs.

Cliquez sur l'icône du disque dans la barre d'outils et choisissez le nom. images. Lorsque vous développez le les tables dossier dans le Explorateur d'objets à gauche, la nouvelle table devrait être listée. Dans une implémentation complète, chaque utilisateur de l'application aurait son propre jeu d'images et il y aurait sans doute d'autres tables dans la base de données pour les noms d'utilisateur, mots de passe et autres informations associées à l'utilisateur. Pour les besoins de ce tutoriel, imaginons que nous sommes un utilisateur authentifié manipulant notre propre ensemble d'images..

Nous devons maintenant renseigner la table avec certaines données. faites un clic droit sur la nouvelle table et choisissez Éditer les 200 premières lignes; la console changera à nouveau pour que vous ayez une vue éditable de la table. Un identifiant la colonne est insérée automatiquement dans la table; Dans cet exemple, j'ai simplement utilisé un numéro d'index de base zéro pour les valeurs de cette colonne, mais cela devrait correspondre aux noms de fichier des images utilisées. Utilisez les données montrées ici:


Le fichier aspx

Pour créer une nouvelle page aspx, cliquez avec le bouton droit sur la racine du site dans le répertoire. Explorateur de solution à la droite de l'application et choisissez Ajoute un nouvel objet. Dans la boîte de dialogue qui apparaît, choisissez Formulaire Web dans la partie supérieure et Visual C # dans le La langue sélectionner la case. Cliquez sur Ajouter.

Cela donnera une nouvelle page appelée Default.aspx, qui s'ouvrira automatiquement dans l'EDI. La nouvelle page est listée dans le Explorateur de solution à droite et il y a une icône plus à côté indiquant qu'il contient quelque chose. Pour ceux d'entre vous qui n'ont jamais travaillé avec .Net auparavant, il contient le code-behind aspx.cs fichier que nous pouvons utiliser pour ajouter la logique côté serveur pour la page un peu plus tard.

Le fichier aspx contient déjà quelques éléments, dont un

; ajoutez le code suivant dans le élément:

Organisateur d'images

Réorganisez les images en faisant glisser une image vers un nouvel emplacement. Vos modifications seront enregistrées automatiquement.

Nous avons un simple conteneur externe avec deux

éléments à l'intérieur l'une contient de brèves instructions tandis que l'autre sera utilisée pour contenir les éléments d'image triables. Afin de remplir le conteneur d'images avec les images de la base de données, nous pouvons utiliser le contrôle pratique .Net Repeater; ajoutez le code suivant dans le conteneur d'images:

  "> "alt ="<%# DataBinder.Eval(Container.DataItem, "alt") %>"/>   

Nous utilisons le élément que le contrôle repeater nous venons d’ajouter à la page. Lorsque vous ouvrez le Default.aspx.cs fichier vous verrez qu'il y a déjà plusieurs éléments dans le fichier; il y a une série de en utilisant directives en haut du fichier qui indiquent au serveur les espaces de noms des composants .Net requis par le fichier aspx. En plus de ceux inclus dans le fichier, nous devrons également ajouter les éléments suivants:

using System.Data; using System.Data.SqlClient;

Suite à cela, nous avons une définition de classe et un Page_Load gestionnaire d'événement que nous pouvons utiliser pour exécuter le code côté serveur lors du chargement de la page aspx. Dans ce gestionnaire d'événements, ajoutez le code suivant:

// définition de la connexion SqlConnection dbCon = new SqlConnection ("Serveur = BUREAU \\ SQLEXPRESS; UID = sa; PWD = motdepasse; base de données = image_organiser"); // définit la chaîne de requête sSQL = "Select * from images"; // définir la commande SqlCommand cmd = new SqlCommand (sSQL, dbCon); // connexion ouverte dbCon.Open (); // lire les données SqlDataReader ds = cmd.ExecuteReader (); // lie au repeater imageRepeat.DataSource = ds; imageRepeat.DataBind (); // ferme la connexion dbCon.Close ();

Le code est très simple, parcourons-le; nous définissons une nouvelle SqlConnection en utilisant la variable dbCon. La valeur de cette variable est la chaîne de connexion utilisée pour se connecter à la base de données. Elle comprend le nom du serveur, le nom d'utilisateur (sa est la valeur par défaut), mot de passe et nom de la base de données. N'oubliez pas de remplacer votre mot de passe dans le code ci-dessus avec le mot de passe que vous avez défini lors de l'installation de SQL.

Ensuite, nous définissons notre requête, qui dans ce cas consiste simplement à sélectionner tout le contenu de la base de données à l’aide de la touche * joker. Nous stockons également le SqlCommand dans une variable qui comprend la requête et la connexion. Ensuite, nous pouvons ouvrir la connexion avec le Ouvrir() méthode et lire les données dans un SqlDataReader variable avec le ExecuteReader () méthode appelée sur le SqlCommand.

Enfin, nous lions les données à notre commande de répéteur en réglant la dès variable comme le répéteur La source de données et en appelant le DataBind () méthode avant de fermer définitivement la connexion à la base de données. Nous n'avons pas besoin de sélectionner le contrôle du répéteur, nous pouvons simplement y faire référence directement à l'aide du ID nous avons spécifié dans la page aspx. La première étape de notre code est maintenant terminée, le répéteur affichera un

  • et pour chaque ligne de notre base de données. Ça va paraître un peu fade à ce stade cependant ajoutons un peu de style de base.


    Styliser la page

    Pour ajouter une nouvelle feuille de style au site, cliquez avec le bouton droit de la souris sur le bouton css dossier dans le Explorateur de solution à droite et choisissez Ajoute un nouvel objet; sélectionner Feuille de style dans le volet supérieur de la boîte de dialogue et définissez le prénom champ à image_organiser.css, puis frappé Ajouter. Le nouveau fichier s'ouvrira automatiquement dans l'EDI; ajoutez-y le code suivant:

    #outerWrap width: 1004px; marge: auto; position: relative; couleur de fond: #eee; bordure: solide 1px # 999;  #outerWrap: after content: "."; bloc de visualisation; visibilité: cachée; clarifier les deux;  h1 font: italic normal 24px Georgia, Serif; text-align: center; marge: 10px 0;  p margin: 0; police: Arial 12px, Sans-serif; rembourrage: 0 10px;  #left width: 218px; float: gauche;  #images margin: 0; rembourrage: 0; float: gauche; largeur: 786px;  #images li list-style-type: none; float: gauche; curseur: déplacer; marge: 10px 10px 0 0; largeur: 250px; hauteur: 250px; bordure: solide 1px # 999;  #images .vacant border: 3px en pointillé # 66d164; largeur: 246px; hauteur: 246px; couleur d'arrière-plan: #fff;  .success, .failure margin: 0 0 0 10px; remplissage: 4px 0 4px 26px; position: absolue; en bas: 18px; poids de police: gras;  .success background: url ('… /img/tick.png') no-repeat 0 1px; couleur: # 12751c;  .failure background: url ('… /img/cross.png') no-repeat 0 0; couleur: # 861b16; 

    Ces styles de base présentent simplement la page dans le format que nous souhaitons pour cet exemple. Il n’ya rien d’important ici, tout peut être modifié pour répondre à d’autres exigences. N'oubliez pas de créer un lien vers la nouvelle feuille de style dans le de la page avec ce qui suit:

    À ce stade, la page devrait maintenant apparaître comme ceci lors de son premier chargement dans le navigateur:

    Vous pouvez afficher la page en cliquant avec le bouton droit de la souris sur le fichier aspx dans la liste. Explorateur de solution et en choisissant Voir dans le navigateur. Ceci utilisera le serveur Web intégré de l'EDI pour afficher la page.


    Rendre les images triables

    Le but de la page est de rendre les images triables afin que l’utilisateur puisse les réorganiser. Pour ce faire, nous devons créer un lien vers les fichiers de l’interface utilisateur jQuery dans notre dossier js; ajouter ce qui suit

    Rendre les images triables est extrêmement facile; après ce qui précède

    Tout ce que nous faisons est d'appeler le triable () méthode sur le conteneur des éléments que nous aimerions pouvoir trier. Nous fournissons un objet de configuration à la méthode en spécifiant le nom de la classe à appliquer à l'emplacement vide dans lequel l'élément en cours de tri peut être déposé à l'aide de l'outil espace réservé option, et une fonction de rappel à exécuter chaque fois qu’un tri est effectué et que l’ordre des éléments change. Lorsque nous parcourons la page à ce stade, nous devrions constater que les images sont triables et que nos vacant les styles sont appliqués:


    Sauvegarder la nouvelle commande

    Dans le fichier principal .aspx, il ne nous reste plus qu'à envoyer le nouvel ordre des images au serveur à chaque fois que les images sont triées; remplace le commentaire dans le mettre à jour callback avec le code suivant:

    // create vars var orderArray = [], wrap = ; // réinitialiser le message 'enregistré' $ (". success", $ ("# left")). remove (); // traite chaque image $ ("# images img"). each (fonction (i) // build img objet var imgObj = "id": $ (this) .parent (). attr ("id"). split ("_") [1], "order": i + 1; // ajoute un objet au tableau orderArray.push (imgObj);); // encapsule dans l'objet wrap.d = orderArray; // passe au serveur $ .ajax (type: "POST", url: "WebService.asmx / updateOrder", données: JSON.stringify (wrap), contentType: "application / json; charset = utf-8", succès : fonction (données) if (data.d === "Saved") $ ("

    ") .text (" Nouvelle commande sauvegardée! ") .addClass (" success "). appendTo (" # left "); else $ ("

    ") .text (" Save failed ") .addClass (" failure "). appendTo (" # left ");));

    Regardons ce que ce code fait; Tout d'abord, nous créons deux variables dont nous aurons besoin plus tard dans le script, la première est un littéral de tableau, la seconde un littéral d'objet. Nous supprimons ensuite les messages de réussite éventuellement présents dans les interactions de tri précédentes. Nous traitons ensuite chacune des images dans la grille d’images en utilisant celle de jQuery. chaque() méthode, qui exécutera la fonction anonyme que nous spécifions une fois pour chaque image de la liste. Cette fonction reçoit automatiquement un numéro d’index pour l’article en cours, que nous devons utiliser..

    Dans cette fonction, nous créons un nouveau littéral d'objet et lui attribuons deux propriétés. la identifiant de l'image actuelle et le numéro d'index de l'image actuelle chaque() itération. Nous insérons ensuite cet objet dans le tableau que nous avons créé il y a un instant. Une fois cette opération effectuée pour chaque image de la page, nous insérons le tableau dans un objet d'habillage. Cet objet sera transmis au serveur, ce qui est fait en utilisant le bas niveau de jQuery ajax () méthode.

    Nous devons utiliser le ajax () méthode au lieu de, disons, la poster() ou getJSON () méthodes, car nous devons spécifier le contentType afin que le serveur traite les données correctement. Nous avons défini le type de demande sur POSTER, spécifiez le fichier côté serveur avec le nom de la méthode qui gérera la demande en tant que paramètre de chaîne de requête. Nous passons également dans notre objet wrap préparé. Afin de convertir complètement l'objet en syntaxe JSON, nous utilisons le stringify () méthode du json2.js fichier.

    Nous spécifions également un gestionnaire de succès qui sera exécuté une fois la demande complétée; nous pouvons voir la chaîne renvoyée par le serveur en accédant aux données renvoyées à ce gestionnaire de succès. La chaîne réelle sera contenue dans une propriété du Les données objet étiqueté . Les données renvoyées à une page via AJAX dans .Net sont généralement accessibles via un objet de cette façon.

    Nous pouvons ajouter un message et un nom de classe différents à la page, selon que le serveur indique que la demande a été un succès ou un échec. Vous pouvez tester cela et voir les différents messages en utilisant Firebug pour changer le identifiant attribuez l'un des conteneurs d'image à une valeur qui n'existe pas dans la base de données, puis triez une image. Voici comment nos messages devraient apparaître:


    Le fichier de méthode Active Server

    Pour recevoir l'objet JSON transmis au serveur via AJAX à la suite d'une interaction de tri, nous pouvons utiliser un fichier asmx; clic droit sur la racine du site dans le Explorateur de solution et choisir Ajoute un nouvel objet. Dans la boîte de dialogue qui apparaît, choisissez Service Web dans la partie supérieure et Visual C # dans le La langue sélectionnez la case, puis cliquez sur Ajouter.

    Cela vous donnera un nouveau WebService.asmx fichier sur votre site, mais le code-behind de ce fichier ira dans un dossier créé automatiquement appelé App_code. Nous n'avons pas du tout besoin de mettre à jour le fichier asmx, tout se fera dans le code-behind WebService.asmx.cs fichier. Ouvrez-le et vous verrez qu'il y a déjà beaucoup de code dans le fichier; changez-le pour que le fichier dans son intégralité apparaisse comme suit:

    en utilisant le système; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Script.Services; ///  /// Reçoit et enregistre un nouvel ordre d'images ///  [WebServiceBinding (ConformsTo = WsiProfiles.BasicProfile1_1)] // Pour autoriser l'appel de ce service Web à partir d'un script, à l'aide d'ASP.NET AJAX, décommentez la ligne suivante. [System.Web.Script.Services.ScriptService] Classe publique WebService: System.Web.Services.WebService Classe publique ImageDTO Chaîne publique id get; ensemble;  public int order get; ensemble;  [WebMethod] chaîne publique updateOrdre (Liste d) // définition de la connexion SqlConnection dbCon = new SqlConnection ("Serveur = BUREAU \\ SQLEXPRESS; UID = sa; PWD = motdepasse; Base de données = image_organiser"); // traite l'objet JSON pour chaque image (ImageDTO img in d) // définit la chaîne de procédure sSQL = "Met à jour les images [order] =" + img.order + "où id =" + img.id; try // open connection dbCon.Open (); // met à jour les données cmd.ExecuteNonQuery (); // ferme la connexion dbCon.Close ();  catch (SqlException ex) return "failed";   //Succès! retour "enregistré"; 

    Nous devons ajouter plusieurs espaces de noms à la section using en haut du fichier pour pouvoir utiliser notre base de données SQL. Nous devrons également nous assurer que nous décommentons la ligne permettant à notre service Web d'être appelée à partir du script situé dans la page aspx principale (il est clairement indiqué par un commentaire dans la version par défaut du fichier)..

    Dans le Service Web classe, nous devons ajouter une nouvelle classe représentant chacun des objets internes du tableau transmis au service Web. Nous faisons cela avec le ImageDTO classe et donne chaque objet identifiant et ordre propriétés et assigner des méthodes getter et setter pour travailler avec les valeurs de ces propriétés.

    Vient ensuite la méthode appelée à partir de notre script; la mise à jour de la commande méthode web. Cette méthode reçoit le objet que nous jetons comme une liste de ImageDTO objets; nous pourrons alors utiliser les méthodes définies dans notre classe pour accéder à chaque propriété.

    Nous définissons les informations de connexion nécessaires à la connexion à notre base de données, puis traitons chaque objet de notre Liste ImageDTO. Nous extrayons le nouvel ordre et le identifiant de l'image et l'utiliser pour mettre à jour le ordre colonne pour la ligne correspondante dans la table MSSQL.

    Ce code est relativement similaire au code que nous avons utilisé pour extraire les informations de la base de données lors du chargement de la page. Nous utilisons simplement une chaîne de connexion différente et utilisons ExecuteNonQuery () méthode au lieu de ExecuteReader () parce que nous mettons à jour la base de données au lieu de simplement la lire. Nous emballons également notre exécution de la connexion dans un essayer… attraper déclaration et soit sortir la chaîne échoué ou enregistré en fonction de la réussite de la mise à jour.


    Résumé

    Nous avons utilisé la saveur c # de .Net associée à l'interface utilisateur de jQuery dans ce didacticiel pour créer une page qui mémorise l'ordre des images et permet de réorganiser les images en fonction des caprices et des désirs du visiteur. Dans cet exemple, il s’agit d’une page simple, mais n’oubliez pas que, dans une implémentation appropriée, elle ne serait probablement accessible que par l’utilisateur authentifié; chaque utilisateur aurait accès à ses propres images et serait capable de les trier, tandis que les images seraient fixées sur la version accessible au public de la page.

    Nous n'avons pas effectué de nettoyage des données transmises dans le fichier côté serveur qui met à jour la base de données. Bien que l'utilisateur n'entre pas les données dans un champ de texte, la requête sortante de la page peut facilement être manipulée afin d'envoyer un code malveillant au serveur. Le danger de ce type d'attaque serait limité car nous ne permettions probablement que le tri en premier lieu aux utilisateurs enregistrés et authentifiés. Bien que la sécurité dépasse le cadre de ce didacticiel, elle doit toujours être une préoccupation majeure lorsqu’il s’agit de code live..