I carrelli della spesa sono molto importanti e possono essere molte volte la parte più intimidatoria della costruzione di un sito di e-commerce. Questo tutorial mostrerà quanto sia facile implementare un carrello acquisti utilizzando ASP.NET. Inoltre, verranno fornite diverse spiegazioni di base per aiutare l'avvio dei programmatori ASP.NET a comprendere questo meraviglioso framework.
Poiché ASP.NET non è stato trattato troppo su NETTUTS, ho pensato che sarebbe opportuno includere una breve panoramica di alcune delle cose che lo distinguono dalle altre lingue.
Se sei nuovo in ASP.NET (e hai Windows), puoi provarlo gratuitamente Puoi scaricare Visual Studio Express visitando il sito Web ASP.NET. Inoltre, quando si crea un sito Web localmente sul proprio computer, è possibile eseguire il sito Web in qualsiasi momento e Visual Studio avvierà rapidamente un server sul computer e visualizzerà il sito Web nel browser predefinito.
Abbiamo bisogno di un posto dove riporre gli oggetti nel carrello e funzioni per manipolare gli oggetti. Creeremo una classe ShoppingCart per questo. Questa classe gestirà anche la memorizzazione della sessione.
Innanzitutto, dobbiamo creare la cartella App_Code. Per fare ciò, vai al menu "Sito web", quindi "Aggiungi cartella ASP.NET" e scegli "Codice_app". Qui è dove metteremo tutte le nostre classi personalizzate. Queste classi saranno automaticamente accessibili dal codice in qualsiasi delle nostre pagine (non abbiamo bisogno di fare riferimento a qualcosa di simile a "include" o altro). Quindi possiamo aggiungere una classe a quella cartella facendo clic destro sulla cartella e scegliendo "Aggiungi nuovo elemento".
Consiglio rapido: Le regioni in ASP.NET sono davvero belle da organizzare e raggruppare il codice. La cosa più bella di loro è che puoi aprire e chiudere le regioni per ridurre al minimo la quantità di codice che stai guardando o trovare rapidamente la strada per un file.
using System.Collections.Generic; usando System.Web; / ** * La classe ShoppingCart * * Contiene gli elementi presenti nel carrello e fornisce i metodi per la loro manipolazione * / publicCart Shopping class #region Properties public ListArticoli get; set privato; #endregion #region Implementazione di Singleton // Le proprietà di sola lettura possono essere impostate solo in fase di inizializzazione o in un'istanza pubblica statica ShoppingCart di public static di costruzione pubblica; // Il costruttore statico viene chiamato non appena la classe viene caricata nella memoria statica ShoppingCart () // Se il carrello non è nella sessione, creane uno e mettilo lì // Altrimenti, prendilo dalla sessione if (HttpContext .Current.Session ["ASPNETShoppingCart"] == null) Instance = new ShoppingCart (); Instance.Items = nuova lista (); HttpContext.Current.Session ["ASPNETShoppingCart"] = Istanza; else Instance = (ShoppingCart) HttpContext.Current.Session ["ASPNETShoppingCart"]; // Un costruttore protetto garantisce che un oggetto non possa essere creato da fuori ShoppingCart () protetto #endione #region #region Method Modification Methods / ** * AddItem () - Aggiunge un elemento allo shopping * / public void AddItem (int productId) // Crea un nuovo elemento da aggiungere al carrello CartItem newItem = new CartItem (productId); // Se questo elemento esiste già nel nostro elenco di elementi, aumentare la quantità // Altrimenti, aggiungere il nuovo elemento all'elenco se (Items.Contains (newItem)) foreach (elemento CartItem negli articoli) if (item.Equals (nuovoItem)) item.Quantity ++; ritorno; else newItem.Quantity = 1; Items.Add (newItem); / ** * SetItemQuantity () - Cambia la quantità di un articolo nel carrello * / public void SetItemQuantity (int productId, int quantity) // Se impostiamo la quantità su 0, rimuoviamo interamente l'oggetto if (quantità == 0) RemoveItem (productId); ritorno; // Trova l'oggetto e aggiorna la quantità CartItem updatedItem = new CartItem (productId); foreach (Item CartItem in Items) if (item.Equals (updatedItem)) item.Quantity = quantity; ritorno; / ** * RemoveItem () - Rimuove un elemento dal carrello della spesa * / public void RemoveItem (int productId) CartItem removedItem = new CartItem (productId); Items.Remove (removedItem); #endregion #region Reporting Methods / ** * GetSubTotal () - restituisce il prezzo totale di tutti gli articoli * prima di tasse, spedizione, ecc. * / decimale pubblico GetSubTotal () decimal subTotal = 0; foreach (elemento CartItem negli articoli) subTotal + = item.TotalPrice; return subTotal; #endregion
Con un posto dove riporre i nostri articoli del carrello, dobbiamo essere in grado di memorizzare informazioni su ciascun articolo. Creeremo una classe CartItem che lo farà. Creeremo anche una semplice classe di prodotti che simulerà un modo per acquisire dati sui prodotti che vendiamo.
La classe CartItem:
usando il sistema; / ** * The CartItem Class * * Fondamentalmente una struttura per contenere i dati degli articoli * / public class CartItem: IEquatable#region Properties // Un luogo in cui memorizzare la quantità nel carrello // Questa proprietà ha un getter implicito e setter. public int Quantity get; impostato; private int _productId; public int ProductId get return _productId; set // Per garantire che l'oggetto Prod venga ricreato _product = null; _productId = value; prodotto privato _product = null; prodotto pubblico Prod get // Inizializzazione pigra: l'oggetto non verrà creato finché non sarà necessario se (_prodotto == null) _product = new Product (ProductId); return _product; public stringa Descrizione get return Prod.Description; publicPimal UnitPrice get return Prod.Price; public decimal TotalPrice get return UnitPrice * Quantity; #endregion // Il costruttore CartItem ha solo bisogno di un prodotto ID pubblico CartItem (int productId) this.ProductId = productId; / ** * Equals () - Necessario implementare l'interfaccia IEquatable * Verifica se questo elemento è uguale al parametro * Questo metodo viene chiamato dal metodo Contains () nella classe List * Abbiamo usato questo metodo Contains () nel metodo AddComm () di ShoppingCart * / public bool Equals (elemento CartItem) return item.ProductId == this.ProductId;
La classe del prodotto:
/ ** * The Product class * * Questo serve solo per simulare un modo di accedere ai dati sui nostri prodotti * / public class Product public int Id get; impostato; decimale pubblico Prezzo get; impostato; stringa pubblica Descrizione get; impostato; public Product (int id) this.Id = id; switch (id) case 1: this.Price = 19.95m; this.Description = "Scarpe"; rompere; caso 2: questo.Prezzo = 9,95 m; this.Description = "Camicia"; rompere; caso 3: questo.Prezzo = 14.95m; this.Description = "Pantaloni"; rompere;
Definizione: Una "proprietà" in ASP.NET è una variabile in una classe che ha un setter, un getter o entrambi. Questo è simile ad altre lingue, ma in ASP.NET, la proprietà word si riferisce specificamente a questo. Un esempio di ciò è la proprietà ProductId nella classe CartItem. Non è semplicemente una variabile in una classe con un metodo per ottenerla o impostarla. È dichiarato in modo speciale con i blocchi e set .
Dopo aver avuto la testa nel codice per così tanto tempo, è tempo di fare qualcosa di visivo. Questa pagina sarà semplicemente un modo per aggiungere elementi al carrello. Tutto ciò di cui abbiamo bisogno sono alcuni elementi con i collegamenti "Aggiungi al carrello". Mettiamo questo codice nella pagina Default.aspx.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>Il mio negozio
Come puoi vedere, l'unica cosa che succede qui è che abbiamo alcuni LinkButtons che hanno gestori di eventi OnClick associati a loro.
Nella pagina code-behind, abbiamo 4 gestori di eventi. Ne abbiamo uno per ogni LinkButton che aggiunge un articolo al carrello e reindirizza l'utente a visualizzare il suo carrello. Abbiamo anche un gestore di eventi Page_Load che viene creato dall'IDE per impostazione predefinita che non è stato necessario utilizzare.
usando il sistema; public partial class _Default: System.Web.UI.Page protected void Page_Load (object mittente, EventArgs e) protected void btnAddShoes_Click (object mittente, EventArgs e) // Aggiungi il prodotto 1 al carrello ShoppingCart.Instance.AddItem (1); // Reindirizza l'utente per visualizzare il suo carrello della spesa Response.Redirect ("ViewCart.aspx"); protected void btnAddShirt_Click (mittente dell'oggetto, EventArgs e) ShoppingCart.Instance.AddItem (2); Response.Redirect ( "ViewCart.aspx"); protected void btnAddPants_Click (mittente dell'oggetto, EventArgs e) ShoppingCart.Instance.AddItem (3); Response.Redirect ( "ViewCart.aspx");
Infine, quello che abbiamo preparato per tutto il tempo: il carrello della spesa! Guardiamo prima ViewCart.aspx e poi lo spiegherò.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ViewCart.aspx.cs" Inherits="ViewCart" %>Carrello della spesa
Il controllo GridView è un controllo potente che può sembrare complicato all'inizio. Non discuterò gli elementi di stile perché sono auto-esplicativi. (Ci sono alcuni principi qui che non ho intenzione di spiegare in modo approfondito. Sto solo cercando di ottenere l'idea principale). Scopriamolo.
ID = "gvShoppingCart"
AutoGenerateColumns = "false"
EmptyDataText = "Non c'è niente nel tuo carrello."
ShowFooter = "true"
DataKeyNames = "ProductId"
OnRowDataBound = "gvShoppingCart_RowDataBound" OnRowCommand = "gvShoppingCart_RowCommand"
Ora parliamo delle colonne. Qui definiamo le colonne e GridView prenderà ogni riga dei dati che forniamo e mapperemo i dati in quella riga alla colonna in cui dovrebbe essere visualizzato. La colonna più semplice è il BoundField. Nel nostro caso, cercherà una proprietà "Description" nel nostro oggetto CartItem e la visualizzerà nella prima colonna. L'intestazione per quella colonna mostrerà anche "Descrizione".
Avevamo bisogno che la quantità fosse visualizzata all'interno di una casella di testo piuttosto che semplicemente visualizzata come testo, quindi abbiamo utilizzato un TemplateField. Il TemplateField ti permette di mettere quello che vuoi in quella colonna. Se hai bisogno di alcuni dati dalla riga, basta inserire <%# Eval("PropertyName") %>. Il LinkButton che abbiamo inserito nel nostro TemplateField ha un CommandName e un CommandArgument, entrambi i quali verranno passati al gestore di eventi RowCommand di GridView.
L'ultima cosa che vale la pena menzionare qui è che gli ultimi due campi vincolati hanno specificato una stringa DataFormat. Questa è solo una delle molte stringhe di formato fornite da ASP.NET. Questo formatta il numero come valuta. Vedere la documentazione Microsoft per altre stringhe di formato.
Ora possiamo guardare la pagina del codice sottostante. Ho fornito molti commenti qui per descrivere cosa sta succedendo.
Ora abbiamo un carrello della spesa funzionante!
1 ottobre in Screencast di Jeffrey Way
56
Sono felice di dire che oggi pubblichiamo il nostro primo articolo su ASP.NET. In questo screencast, ti mostrerò come implementare una semplice funzionalità di ricerca nel tuo sito web personale. Analizzeremo molte delle nuove funzionalità di ASP.NET 3.5, come LINQ e molti dei controlli AJAX forniti con Visual Studio / Web Developer.
Continua a leggere