asp.net中的NamingContainer是什么意思?

我们在用GridView控件时经常要在里面嵌套其它控件,嵌套层次多了以后需要通过NamingContainer来查找控件,那么NamingContainer到底是什么意思呢,通过资料做了个小例子,并且用它与UniqueID作对比。
文献资料:
Control.NamingContainer 属性获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同 Control.ID 属性值的服务器控件。
ASP.NET Web 应用程序的每一页均包含控件的层次结构。此层次结构与控件是否生成用户可见的 UI 无关。给定控件的命名容器是层次结构中该控件之上的父控件,此父控件实现 INamingContainer 接口。实现此接口的服务器控件为其子服务器控件的 ID 属性值创建唯一的命名空间。
当针对列表 Web 服务器控件(如 Repeater 和 DataList 服务器控件)进行数据绑定时,为服务器控件创建唯一的命名空间尤其重要。当数据源中的多个项创建服务器控件的多个实例,且该服务器控件是重复控件的子级时,命名容器确保这些子控件的每个实例具有不冲突的 UniqueID 属性值。页的默认命名容器是请求该页时生成的 Page 类的实例。
可以使用此属性确定特定服务器控件所在的命名容器。
看文字晕,结全代码看看就明白了。
<% @ Import Namespace = "System.Data"  %>
<html>
   <head>
      <script language="C#" runat="server">
      //创建数据源
      ICollection CreateDataSource()
      {
         DataTable myDataTable = new DataTable();
         DataRow myDataRow;
         myDataTable.Columns.Add(new DataColumn("EmployeeName", typeof(string)));//增加第一列
          myDataTable.Columns.Add(new DataColumn("WebUrl", typeof(string)));//增加第二列
         for (int i = 0; i < 10; i++)
         {
            myDataRow = myDataTable.NewRow();
            myDataRow[0] = "somename" + i.ToString();
            myDataRow[1] = " http://www.cn-web.com/" + i.ToString();
            myDataTable.Rows.Add(myDataRow);
         }
         DataView myDataView = new DataView(myDataTable);
         return myDataView;
      }
      void Page_Load(Object sender, EventArgs e)
      {
         if (!IsPostBack)
         {
            // 绑定数据源
            GridView1.DataSource = CreateDataSource();
            GridView1.DataBind();
         }
      }
      void button1_Click(Object sender,EventArgs e)
      {
         LinkButton myLB = (LinkButton)sender;//获取事件发送者LinkButton1
         Control myNamingContainer = myLB.NamingContainer;//获取LinkButton1的NamingContainer
         myLabel1.Text = "The NamingContainer is : " + myNamingContainer.UniqueID;
         // Display the UniqueID.
         myLabel2.Text = "The UniqueID is : " + myLB.UniqueID;//获取LinkButton1的UniqueID
         myLabel3.Text="button2的ID为"+myLB.FindControl("button2").UniqueID;//获取LinkButton2的UniqueID
      }     
        void button2_Click(Object sender,EventArgs e)
      {
         LinkButton myLB = (LinkButton)sender;//获取事件发送者LinkButton2
         Control myNamingContainer = myLB.NamingContainer;//获取LinkButton1的NamingContainer
         myLabel1.Text = "The NamingContainer is : " + myNamingContainer.UniqueID;
         // Display the UniqueID.
         myLabel2.Text = "The UniqueID is : " + myLB.UniqueID;//获取LinkButton1的UniqueID
         myLabel3.Text="button1的ID为"+myLB.FindControl("button1").UniqueID;//获取LinkButton2的UniqueID
      }     
    </script>
   </head>
   <body>
      <form runat="server" ID="Form1">
         <h3>
            Control NamingContainer Example
         </h3>
         <h4>
            Click an item to view it's Naming Container and UniqueID
         </h4>
         <asp:Label ID="myLabel1" Runat="server"></asp:Label>
         <br>
         <asp:Label ID="myLabel2" Runat="server"></asp:Label>&nbsp;<br>
         <asp:Label ID="myLabel3" Runat="server"></asp:Label>
         &nbsp;<br>
          <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
              <Columns>
                  <asp:TemplateField HeaderText="EmployeeName">
                    
                      <ItemTemplate>
                        <asp:LinkButton id="button1" Text='<%# DataBinder.Eval(Container.DataItem, "EmployeeName") %>' runat="server" OnClick="button1_Click" />
                      </ItemTemplate>
                  </asp:TemplateField>
                  <asp:TemplateField HeaderText="WebUrl">
                      <ItemTemplate>
                         <asp:LinkButton id="button2" Text='<%# DataBinder.Eval(Container.DataItem, "WebUrl") %>' runat="server" OnClick="button2_Click" />
                      </ItemTemplate>
                  </asp:TemplateField>
              </Columns>
          </asp:GridView>
      </form>
   </body>
</html>

以上代码充分说明,在GridView 控件中,我们只要得到GridView 里一个控件,然后通过它的NamingContainer属性获取此控件的命名容器(NamingContainer),然后通过FindControl方法就可以找到同属于该NamingContainer下的其它控件了。
效果图示:

转载于:https://www.cnblogs.com/hunterzou/archive/2010/09/19/1830882.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET 实现购物车,可以使用 Session 对象来存储购物车的商品信息。要设置商品数量,可以在添加商品到购物车时,将商品数量作为一个属性存储在购物车项。然后,在购物车页面,可以提供一个输入框或者加减按钮,让用户可以修改商品数量。 示例代码: 添加商品到购物车: ``` protected void AddToCartButton_Click(object sender, EventArgs e) { // 获取商品信息 int productId = int.Parse(ProductIdHiddenField.Value); string productName = ProductNameLabel.Text; decimal price = decimal.Parse(PriceLabel.Text); // 创建购物车项对象 CartItem item = new CartItem(productId, productName, price, 1); // 初始数量为1 // 将购物车项添加到购物车 if (Session["Cart"] == null) { Session["Cart"] = new Cart(); } Cart cart = (Cart)Session["Cart"]; cart.AddItem(item); } ``` Cart 类: ``` public class Cart { private List<CartItem> items = new List<CartItem>(); public void AddItem(CartItem item) { // 判断购物车是否已经存在该商品,如果存在,则增加数量 foreach (CartItem existingItem in items) { if (existingItem.ProductId == item.ProductId) { existingItem.Quantity += item.Quantity; return; } } // 如果购物车不存在该商品,则添加新的购物车项 items.Add(item); } public List<CartItem> Items { get { return items; } } } ``` CartItem 类: ``` public class CartItem { public int ProductId { get; set; } public string ProductName { get; set; } public decimal Price { get; set; } public int Quantity { get; set; } public CartItem(int productId, string productName, decimal price, int quantity) { this.ProductId = productId; this.ProductName = productName; this.Price = price; this.Quantity = quantity; } } ``` 在购物车页面,可以使用 GridView 或者 Repeater 控件来显示购物车的商品列表。在模板列,可以添加一个输入框或者加减按钮,让用户可以修改商品数量。然后,在修改数量的事件,更新购物车项的数量属性即可。 示例代码: ``` protected void QuantityTextBox_TextChanged(object sender, EventArgs e) { TextBox quantityTextBox = (TextBox)sender; GridViewRow row = (GridViewRow)quantityTextBox.NamingContainer; int rowIndex = row.RowIndex; // 获取购物车项Id int itemId = (int)GridView1.DataKeys[rowIndex].Value; // 获取购物车对象 Cart cart = (Cart)Session["Cart"]; // 更新购物车项数量 int quantity = int.Parse(quantityTextBox.Text); cart.Items[rowIndex].Quantity = quantity; // 更新显示 GridView1.DataBind(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值