Les paniers d'achat sont très importants et peuvent souvent constituer la partie la plus intimidante de la création d'un site de commerce électronique. Ce tutoriel montrera à quel point il est facile d'implémenter un panier en utilisant ASP.NET. De plus, plusieurs explications de base seront fournies pour aider les programmeurs ASP.NET débutants à comprendre ce cadre merveilleux..
Comme ASP.NET n’a pas été beaucoup traité sur NETTUTS, j’ai pensé qu’il serait bon d’inclure un bref aperçu de certains éléments qui le distinguent des autres langues..
Si vous êtes nouveau sur ASP.NET (et que vous avez Windows), vous pouvez l’essayer gratuitement. Vous pouvez télécharger Visual Studio Express en visitant le site Web ASP.NET. De même, lorsque vous créez un site Web localement sur votre ordinateur, vous pouvez l’exécuter à tout moment. Visual Studio démarre rapidement un serveur sur votre ordinateur et affiche votre site Web dans votre navigateur par défaut..
Nous avons besoin d’un endroit pour stocker les articles dans le panier ainsi que de fonctions pour manipuler les articles. Nous allons créer une classe ShoppingCart pour cela. Cette classe va également gérer le stockage de session.
Tout d'abord, nous devons créer le dossier App_Code. Pour ce faire, allez dans le menu "Site Web", puis "Ajouter un dossier ASP.NET" et choisissez "Code_App". C'est ici que nous allons placer toutes nos classes personnalisées. Ces classes seront automatiquement accessibles depuis le code de l’une de nos pages (nous n’avons pas besoin de le référencer en utilisant quelque chose de similaire à "include" ou quoi que ce soit). Ensuite, nous pouvons ajouter une classe à ce dossier en faisant un clic droit sur le dossier et en choisissant "Ajouter un nouvel élément".
Conseil rapide: Les régions dans ASP.NET sont vraiment sympas pour organiser et regrouper du code. La meilleure chose à leur sujet est que vous pouvez ouvrir et fermer des régions afin de minimiser la quantité de code que vous consultez ou de vous repérer rapidement dans un fichier..
using System.Collections.Generic; using System.Web; / ** * La classe ShoppingCart * * Contient les éléments présents dans le panier et fournit des méthodes pour les manipuler * / public class ShoppingCart #region Properties public ListArticles get; ensemble privé; #endregion #region Implémentation Singleton // Les propriétés en lecture seule ne peuvent être définies qu'en initialisation ou dans un constructeur public static en lecture seule ShoppingCart Instance; // Le constructeur statique est appelé dès que la classe est chargée en mémoire statique ShoppingCart () // Si le panier n'est pas dans la session, créez-en un et mettez-le là // Sinon, récupérez-le à partir de la session if (HttpContext .Current.Session ["ASPNETShoppingCart"] == null) Instance = new ShoppingCart (); Instance.Items = nouvelle liste (); HttpContext.Current.Session ["ASPNETShoppingCart"] = Instance; else Instance = (Panier) HttpContext.Current.Session ["ASPNETShoppingCart"]; // Un constructeur protégé garantit qu'aucun objet ne peut être créé de l'extérieur. ShoppingCart () # #endregion #region Méthodes de modification d'élément / ** * AddItem () - Ajoute un élément à shopping * / public void AddItem (int productId) // Créer un nouvel élément à ajouter au panier CartItem newItem = new CartItem (productId); // Si cet élément existe déjà dans notre liste d'éléments, augmentez la quantité // Sinon, ajoutez le nouvel élément à la liste if (Items.Contains (newItem)) foreach (élément CartItem in Items) if (item.Equals (newItem)) item.Quantity ++; revenir; else newItem.Quantity = 1; Items.Add (newItem); / ** * SetItemQuantity () - Modifie la quantité d'un article du panier * / public void SetItemQuantity (int productId, int quantit) // Si nous définissons la quantité sur 0, supprimons entièrement l'élément si (quantité == 0) RemoveItem (productId); revenir; // Trouver l'article et mettre à jour la quantité CartItem updatedItem = new CartItem (productId); foreach (élément CartItem dans Items) if (item.Equals (updatedItem)) item.Quantity = quantité; revenir; / ** * RemoveItem () - Supprime un article du panier * / public void RemoveItem (int productId) CartItem removeItem = new CartItem (productId); Items.Remove (removeItem); #endregion #region Méthodes de rapport / ** * GetSubTotal () - renvoie le prix total de tous les éléments * avant taxes, envoi, etc. * / public décimal GetSubTotal () decimal subTotal = 0; foreach (élément CartItem dans Items) subTotal + = item.TotalPrice; retour sous-total; #endregion
Avec un emplacement pour stocker nos articles dans le panier, nous devons pouvoir stocker des informations sur chaque article. Nous allons créer une classe CartItem qui le fera. Nous allons également créer une classe de produits simple qui simulera un moyen de récupérer des données sur les produits que nous vendons..
La classe CartItem:
en utilisant le système; / ** * La classe CartItem * * Fondamentalement une structure pour la conservation des données d'élément * / classe publique CartItem: IEquatable#region Properties // Un emplacement pour stocker la quantité dans le panier // Cette propriété a un getter et un setter implicites. public int Quantity get; ensemble; private int _productId; public int ProductId get return _productId; set // Pour s'assurer que l'objet Prod sera recréé _product = null; _productId = valeur; private Product _product = null; public Product Prod get // Initialisation différée - l'objet ne sera pas créé jusqu'à ce qu'il soit nécessaire si (_product == null) _product = new Product (ProductId); return _product; chaîne publique Description get return Prod.Description; décimal public UnitPrice get return Prod.Price; décimal public TotalPrice get return UnitPrice * Quantity; #endregion // Le constructeur CartItem a juste besoin d'un productId public CartItem (int productId) this.ProductId = productId; / ** * Equals () - Nécessaire pour implémenter l'interface IEquatable * Vérifie si cet élément est égal au paramètre * Cette méthode est appelée par la méthode Contains () de la classe List * Nous avons utilisé cette méthode Contains () dans la méthode ShoppingCart AddItem () * / public bool Equals (élément CartItem) return item.ProductId == this.ProductId;
La classe de produit:
/ ** * La classe de produits * * Ceci est juste pour simuler un moyen d'accéder aux données sur nos produits * / public class Produit public int Id get; ensemble; public decimal Price get; ensemble; chaîne publique Description get; ensemble; public Product (int id) this.Id = id; switch (id) cas 1: this.Price = 19.95m; this.Description = "Chaussures"; Pause; cas 2: this.Price = 9,95 m; this.Description = "Chemise"; Pause; cas 3: this.Price = 14,95 m; this.Description = "Pantalon"; Pause;
Définition: Une "propriété" dans ASP.NET est une variable dans une classe qui a un setter, un getter ou les deux. Ceci est similaire aux autres langages, mais dans ASP.NET, le mot propriété se réfère spécifiquement à cela. Un exemple de ceci est la propriété ProductId dans la classe CartItem. Ce n'est pas simplement une variable dans une classe avec une méthode pour l'obtenir ou la définir. Il est déclaré de manière spéciale avec les blocs get et set ..
Après avoir si longtemps compris le code, il est temps de faire quelque chose de visuel. Cette page sera simplement un moyen d’ajouter des articles au panier. Tout ce dont nous avons besoin est quelques articles avec des liens "Ajouter au panier". Mettons ce code dans la page Default.aspx.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>Mon magasin
Comme vous pouvez le constater, la seule chose qui se passe ici est que nous avons quelques LinkButtons auxquels sont associés des gestionnaires d’événements OnClick..
Dans la page code-behind, nous avons 4 gestionnaires d’événements. Nous en avons un pour chaque lien qui ajoute un élément au panier et redirige l'utilisateur vers son panier. Nous avons également un gestionnaire d'événements Page_Load créé par défaut par l'EDI que nous n'avions pas besoin d'utiliser..
en utilisant le système; classe partielle publique _Default: System.Web.UI.Page protégé void Page_Load (expéditeur d'objet, EventArgs e) protégé void btnAddShoes_Click (expéditeur d'objet, EventArgs e) // Ajoute le produit 1 au panier ShoppingCart.Instance.AddItem (1); // Redirige l'utilisateur pour qu'il visualise son panier Response.Redirect ("ViewCart.aspx"); void protected btnAddShirt_Click (expéditeur d'objet, EventArgs e) ShoppingCart.Instance.AddItem (2); Response.Redirect ("ViewCart.aspx"); void protected btnAddPants_Click (expéditeur d'objet, EventArgs e) ShoppingCart.Instance.AddItem (3); Response.Redirect ("ViewCart.aspx");
Enfin, ce que nous avons préparé depuis le début: le panier! Regardons d'abord ViewCart.aspx et je l'expliquerai après cela.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ViewCart.aspx.cs" Inherits="ViewCart" %>Chariot
Le contrôle GridView est un contrôle puissant qui peut sembler compliqué au début. Je ne discuterai pas des éléments de style car ils sont explicites. (Il y a quelques principes ici que je ne vais pas expliquer en profondeur. Je vais juste essayer de faire passer l'idée principale). Faisons le décomposer.
ID = "gvShoppingCart"
AutoGenerateColumns = "false"
EmptyDataText = "Il n'y a rien dans votre panier."
ShowFooter = "true"
DataKeyNames = "ProductId"
OnRowDataBound = "gvShoppingCart_RowDataBound" OnRowCommand = "gvShoppingCart_RowCommand"
Parlons maintenant des colonnes. Nous définissons les colonnes ici et GridView prendra chaque ligne dans les données que nous fournissons et mappera les données de cette ligne à la colonne dans laquelle elle devrait s'afficher. La colonne la plus simple est BoundField. Dans notre cas, il va rechercher une propriété "Description" dans notre objet CartItem et l'afficher dans la première colonne. L'en-tête de cette colonne affichera également "Description".
Nous avions besoin de la quantité à afficher dans une zone de texte plutôt que de simplement afficher du texte. Nous avons donc utilisé un TemplateField. Le TemplateField vous permet de mettre ce que vous voulez dans cette colonne. Si vous avez besoin de certaines données de la ligne, vous insérez simplement <%# Eval("PropertyName") %>. Le LinkButton que nous avons mis dans notre TemplateField a un CommandName et un CommandArgument, qui seront tous deux transmis à notre gestionnaire d'événements RowCommand de GridView..
La dernière chose à noter ici est que les deux derniers BoundField ont un DataFormatString spécifié. Il ne s'agit que de l'une des nombreuses chaînes de format fournies par ASP.NET. Celui-ci formate le nombre en tant que devise. Voir la documentation Microsoft pour d'autres chaînes de format..
Nous pouvons maintenant regarder la page code-behind. J'ai fourni beaucoup de commentaires ici pour décrire ce qui se passe.
Maintenant, nous avons un bon panier de travail!
1er octobre dans Screencasts par Jeffrey Way
56
Je suis heureux de dire qu'aujourd'hui, nous publions notre tout premier article sur ASP.NET. Dans ce screencast, je vais vous montrer comment implémenter une fonctionnalité de recherche simple sur votre site web personnel. Nous allons passer en revue de nombreuses nouvelles fonctionnalités d'ASP.NET 3.5, telles que LINQ et de nombreux contrôles AJAX fournis avec Visual Studio / Web Developer..
Continuer la lecture