OnItemCommand

本文详细介绍了如何使用OnItemCommand方法为DataList控件提供自定义的ItemCommand事件处理程序,特别关注了具有自定义CommandName(如Add)的按钮控件在单击时的行为。
使用 OnItemCommand 方法提供 ItemCommand 事件的自定义处理程序。ItemCommand 事件在单击 DataList 控件中的任一按钮时引发,并且当您具有在 DataList 控件中有自定义 CommandName 值(如 Add)的按钮控件时通常使用它。
# 简单的周边交易系统 (C# ASP.NET Web Forms) 下面是一个不使用JavaScript、MVC和web.config的简单周边交易系统,基于C# ASP.NET Web Forms实现。 ## 1. 创建ASP.NET Web Forms项目 首先创建一个新的ASP.NET Web Forms项目。 ## 2. 数据库设计 (使用代码中的内存数据库) 由于不使用web.config,我们将使用内存中的数据存储。 ## 3. 代码实现 ### Default.aspx ```html <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SimpleTradeSystem.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>简单周边交易系统</title> <style> body { font-family: Arial; margin: 20px; } .container { width: 800px; margin: 0 auto; } .product-list { float: left; width: 60%; } .cart { float: right; width: 35%; border: 1px solid #ccc; padding: 10px; } .product { border: 1px solid #ddd; margin-bottom: 10px; padding: 10px; } .clear { clear: both; } </style> </head> <body> <form id="form1" runat="server"> <div class="container"> <h1>周边商品交易系统</h1> <div class="product-list"> <h2>商品列表</h2> <asp:Repeater ID="rptProducts" runat="server" OnItemCommand="rptProducts_ItemCommand"> <ItemTemplate> <div class="product"> <h3><%# Eval("Name") %></h3> <p>价格: <%# Eval("Price", "{0:C}") %></p > <p>库存: <%# Eval("Stock") %></p > <asp:Button ID="btnAddToCart" runat="server" Text="加入购物车" CommandName="AddToCart" CommandArgument='<%# Eval("Id") %>' /> </div> </ItemTemplate> </asp:Repeater> </div> <div class="cart"> <h2>购物车</h2> <asp:Repeater ID="rptCart" runat="server" OnItemCommand="rptCart_ItemCommand"> <ItemTemplate> <div> <%# Eval("ProductName") %> - <%# Eval("Quantity") %> × <%# Eval("Price", "{0:C}") %> = <%# Eval("TotalPrice", "{0:C}") %> <asp:Button ID="btnRemove" runat="server" Text="移除" CommandName="RemoveFromCart" CommandArgument='<%# Eval("ProductId") %>' /> </div> </ItemTemplate> </asp:Repeater> <div style="margin-top: 20px; font-weight: bold;"> 总计: <asp:Label ID="lblTotal" runat="server" Text="$0.00"></asp:Label> </div> <asp:Button ID="btnCheckout" runat="server" Text="结算" OnClick="btnCheckout_Click" style="margin-top: 10px; padding: 5px 15px;" /> <asp:Label ID="lblMessage" runat="server" Text="" ForeColor="Red"></asp:Label> </div> <div class="clear"></div> </div> </form> </body> </html> ``` ### Default.aspx.cs ```csharp using System; using System.Collections.Generic; using System.Web.UI; using System.Web.UI.WebControls; namespace SimpleTradeSystem { public partial class Default : System.Web.UI.Page { // 内存数据库 public static List<Product> Products = new List<Product> { new Product { Id = 1, Name = "限量版T恤", Price = 99.99m, Stock = 10 }, new Product { Id = 2, Name = "纪念徽章", Price = 29.99m, Stock = 20 }, new Product { Id = 3, Name = "签名海报", Price = 49.99m, Stock = 5 }, new Product { Id = 4, Name = "主题水杯", Price = 39.99m, Stock = 15 } }; public static Dictionary<int, CartItem> ShoppingCart = new Dictionary<int, CartItem>(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindProducts(); BindCart(); } } private void BindProducts() { rptProducts.DataSource = Products; rptProducts.DataBind(); } private void BindCart() { rptCart.DataSource = ShoppingCart.Values; rptCart.DataBind(); CalculateTotal(); } protected void rptProducts_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName == "AddToCart") { int productId = Convert.ToInt32(e.CommandArgument); AddToCart(productId); } } protected void rptCart_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandName == "RemoveFromCart") { int productId = Convert.ToInt32(e.CommandArgument); RemoveFromCart(productId); } } private void AddToCart(int productId) { var product = Products.Find(p => p.Id == productId); if (product == null || product.Stock <= 0) { lblMessage.Text = "商品已售罄或不存在"; return; } if (ShoppingCart.ContainsKey(productId)) { ShoppingCart[productId].Quantity++; } else { ShoppingCart.Add(productId, new CartItem { ProductId = productId, ProductName = product.Name, Price = product.Price, Quantity = 1 }); } product.Stock--; BindProducts(); BindCart(); lblMessage.Text = ""; } private void RemoveFromCart(int productId) { if (ShoppingCart.ContainsKey(productId)) { var cartItem = ShoppingCart[productId]; var product = Products.Find(p => p.Id == productId); if (product != null) { product.Stock += cartItem.Quantity; } ShoppingCart.Remove(productId); BindProducts(); BindCart(); } } private void CalculateTotal() { decimal total = 0; foreach (var item in ShoppingCart.Values) { total += item.TotalPrice; } lblTotal.Text = total.ToString("C"); } protected void btnCheckout_Click(object sender, EventArgs e) { if (ShoppingCart.Count == 0) { lblMessage.Text = "购物车为空,无法结算"; return; } // 这里简单模拟结算过程 ShoppingCart.Clear(); BindCart(); lblMessage.Text = "结算成功!感谢您的购买!"; } } public class Product { public int Id { get; set; } public string Name { get; set; } public decimal Price { get; set; } public int Stock { get; set; } } public class CartItem { public int ProductId { get; set; } public string ProductName { get; set; } public decimal Price { get; set; } public int Quantity { get; set; } public decimal TotalPrice => Price * Quantity; } } ``` ## 4. 功能说明 1. **商品展示**:显示所有周边商品,包括名称、价格和库存 2. **购物车功能**: - 添加商品到购物车 - 从购物车移除商品 - 显示购物车总价 3. **结算功能**:简单的结算模拟 4. **库存管理**:添加/移除商品时会自动更新库存 ## 5. 注意事项 1. 这是一个纯服务器端的实现,完全不使用JavaScript 2. 数据存储在内存中,应用重启后会丢失 3. 没有使用MVC架构,而是传统的Web Forms 4. 没有使用web.config文件进行配置 5. 界面简单,但功能完整 给它增加一个登录页面和注册页面
最新发布
06-18
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值