在Repeater中添加runat="server"的div,并控制其是否显示

本文介绍了ASP.NET中Repeater控件的使用方法,包括如何正确地在ItemDataBound事件中查找子控件,避免在Page_Load事件中进行处理而导致的问题。同时讨论了Repeater控件的灵活性及复杂操作的实现。

aspx页代码:

<asp:Repeater ID="rptBlog" runat="server" DataSourceID="objBlog" OnItemDataBound="rptBlog_ItemDataBind">
                             <ItemTemplate>
                                   <div id="rptBlogTitle">
                                        <h3><a><%#eval_r("blogTitle") %></a></h3>
                                        (<%#eval_r("blogDate") %>)

                                    </div>
                                    <div id="divBlogEditDel" runat="server" visible="false">
                                       <a href="EditBlog.aspx">[编辑]</a>
                                         &nbsp;
                                       <a href="#">[删除]</a>
                                    </div>

                                    <div id="rptBlogTypeName">

                                    </div>
                                    <div id="rptBlogContent">
                                        <%#eval_r("blogContent") %>
                                    </div>
                                    <div id="rptBlogFooter">
                                    <a href="blogContent.aspx">查看全文</a>
                                    </div>
                                </ItemTemplate>
</asp:Repeater>

<asp:ObjectDataSource ID="objBlog" runat="server" TypeName="BlogGet" SelectMethod="GetBlog"/>

后台代码:

protected void rptBlog_ItemDataBind(object sender, RepeaterItemEventArgs e)
{
        if (Session["UserName"] != null)
        {
            if (Session["UserName"].ToString() == this.bc_UserName.GetBlog_UserName())
            {
                e.Item.FindControl("divBlogEditDel").Visible = true;
            }
        }
}

注意事项:
1。首先,不能将处理Repeater找子控件的代码放入Page_Load()的if(!Page.IsPostBack){}中,会找不到Item项,原理还没完全搞明白;
2。需要先判断Session[“UserName”] != null,否则,如果是匿名访问的话,会因为这一句:
Session[“UserName”].ToString()而提示“未将对象引用设置到对象实例”的错误。

感想:ASP.NET的数据绑定控件虽然用起来简单,但有时并不灵活,而且有些复杂的操作一般书上都不会介绍,如数据绑定控件的嵌套,内嵌控件的事件操作等,需要自己深入研究。

原文链接 http://blog.sina.com.cn/s/blog_541f0c810100mtgq.html

# 简单的周边交易系统 (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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值