Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 分配唯一id';foreach循环中的按钮_C#_Asp.net - Fatal编程技术网

C# 分配唯一id';foreach循环中的按钮

C# 分配唯一id';foreach循环中的按钮,c#,asp.net,C#,Asp.net,我正在建设网上购物网站,在这个时候有3个产品在它。这是产品的样品 首先,它是一个图像、产品名称、描述、价格、id和“添加到购物车”按钮,它是以编程方式构建的,也是动态的。 您可以看到,每个产品都有自己的按钮,该按钮也是通过foreach循环创建的。 我很困惑,我如何才能得到我分配给它的唯一id?意思是当我点击AddtoCart按钮时,它在foreach循环中给我id=3。 现在,我想要一个帮助,如何“添加到购物车”按钮识别哪个产品被点击,然后显示产品的所有规格,然后根据它进行。 下面是代码示例

我正在建设网上购物网站,在这个时候有3个产品在它。这是产品的样品

首先,它是一个图像、产品名称、描述、价格、id和“添加到购物车”按钮,它是以编程方式构建的,也是动态的。 您可以看到,每个产品都有自己的按钮,该按钮也是通过foreach循环创建的。 我很困惑,我如何才能得到我分配给它的唯一id?意思是当我点击AddtoCart按钮时,它在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);
}
DataSet ds=obj.search_product();
DataTable dt=新的DataTable();
dt=ds.表格[“寄存器_产品”];
foreach(数据行dr在dt.行中)
{
Literal li2=新的Literal();
li2.Text=“
”; 这个.Panel1.Controls.Add(li2); 标签lb1=新标签(); lb1.Text=dr[“Name”].ToString(); this.Panel1.Controls.Add(lb1); //在这里添加价格、图片和ID等文字。 Literal li4=新的Literal(); li4.Text=“
”; 此.Panel1.Controls.Add(li4); 按钮btn=新按钮(); btn.高度=19; btn.宽度=100; btn.Text=“添加到购物车”; btn.Click+=新建事件处理程序(按钮单击); 此.Panel1.Controls.Add(btn); }
有几种方法可以做到这一点,您可以创建
按钮
类的扩展,使用属性来保存ID,或者更简单的方法是使用按钮ID中的
项目ID
,如:

Button btn = new Button();
btn.ID = "btnItem-" + ItemID;
然后在事件处理程序中提取
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
    }
}

作为旁注,更好的选择是创建自己的按钮类(扩展现有的按钮类)并为ItemID添加一个新属性,更好的选项是使用控件,如使用数据绑定的
GridView
Repeater
控件。

我建议您使用或控件,查看ItemCommand和button,或者您也可以直接处理按钮单击,并在模板中找到控件以获取ID。否则,如果不想使用这些控件,则必须在客户端提出类似的机制,在发回之前将事件名称和ID参数添加到隐藏字段中,然后在您的页面中加载检查这些值并将其委托给相应的操作。

您可以为您已经拥有的
foreach
添加一些代码吗?请发布您的所有代码(后端、html、javascript等)。有几种相当简单的方法可以帮助您实现所需的目标。好的,现在,请检查一下。您为什么不简单地使用重复元素和数据绑定来处理所有事件/id连接?你似乎在尝试使用webforms而不使用webforms。我同意。使用Repeater或DataList控件并签出ItemCommand,或者您也可以直接处理按钮单击并在模板中找到控件以获取ID。如何使用ItemID?意味着按钮没有该类型的属性?我怎样才能使用中继器呢?有什么建议吗?@Crazzoar,yes Button没有一个属性来保存
itemID
,这就是为什么要将它存储在按钮的
ID
属性中,你没有在任何地方使用它,所以要利用它,这就是黑客攻击,对于GridView/Repeater搜索,可能是一个起点。你能告诉我如何从aspx页面获取DIV ID吗?下面是代码示例:div class='adds'id='0'style='float:left;填充:10px;'>如何从按钮获取id 0?