将唯一ID分配给foreach循环

时间:2015-05-29 15:50:15

标签: c# asp.net

我正在建立网上购物网站,目前有3种产品。这是产品样本。

enter image description here

首先它是图像,产品名称,描述,价格,ID和"添加到购物车"以编程方式构建的按钮,也是动态的。 您可以看到每个产品都有自己的Button,它也是通过foreach循环创建的。 我很困惑,我怎么能得到我分配给它的那些独特的id?意思是当我点击Add to Cart按钮时,它在foreach循环中给我id = 3。 现在,我想要一个帮助,如何"添加到购物车"按钮标识单击了哪个产品,然后显示产品的所有规格,然后根据它继续。 这是代码示例: 我正在使用3层架构,这里是代码示例:

DataSet ds=obj.searching_product();
DataTable dt = new DataTable();
dt = ds.Tables["Register_Product"];
foreach(DataRow dr in dt.Rows)
{
    Literal li2 = new Literal();
    li2.Text = "<br/>";
    this.Panel1.Controls.Add(li2);
    Label lb1 = new Label();
    lb1.Text = dr["Name"].ToString();
    this.Panel1.Controls.Add(lb1);

    //Adding Here's Literal for price, Images and ID etc.

    Literal li4 = new Literal();
    li4.Text = "<br/>";
    this.Panel1.Controls.Add(li4);
    Button btn = new Button();
    btn.Height = 19;
    btn.Width = 100;
    btn.Text = "Add to Cart";
    btn.Click += new EventHandler(Button_Click);
    this.Panel1.Controls.Add(btn);
}

2 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点,您可以创建Button类的扩展名,使用aa属性来保存ID或更简单的hack 可以使用{{1}在Button的ID中,如:

ItemID

然后在事件处理程序中提取Button btn = new Button(); btn.ID = "btnItem-" + ItemID; ,如:

ItemID

作为旁注,更好的选择是创建自己的按钮类(扩展现有的Button类)并为ItemID添加新属性,更好选项将使用数据绑定来使用void Button_Click(object sender, EventArgs e) { Button senderButton = sender as Button; int itemID = -1; if (senderButton != null && senderButton.ID.Contains('-')) { itemID = int.Parse(senderButton.ID.Split('-')[1]); //or int.TryParse (better) //work with itemID } } GridView控件之类的控件。

答案 1 :(得分:0)

我建议您使用CommandName and CommandArgument或{{3}}控件并查看ItemCommand和按钮的{{3}},或者您也可以直接处理按钮点击并在模板中找到控件获取ID。否则,如果您不想使用这些控件,则必须在客户端提出自己的类似机制,在发回之前将事件名称和ID参数添加到隐藏字段,然后在Page_Load检查中对于这些值并将其委托给适当的行动。