【问题标题】:Assign Unique id's to buttons in foreach loop为 foreach 循环中的按钮分配唯一 ID
【发布时间】:2015-05-30 00:44:57
【问题描述】:

我正在建立在线购物网站,此时其中有 3 个产品。这是产品样本。

首先它是一个图像、产品名称、描述、价格、ID 和“添加到购物车”按钮,它以编程方式构建并且它也是动态的。 您可以看到每个产品都有自己的 Button,它也是通过 foreach 循环创建的。 我很困惑,我怎样才能获得我分配给它的那些唯一 ID?意味着当我单击“添加到购物车”按钮时,它会在 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);
}

【问题讨论】:

  • 您能否包含一些您已经拥有的foreach 的代码?
  • 请发布您的所有代码(后端、html、javascript 等)。有一些相当简单的方法可以帮助您实现所需的目标。
  • 好的,现在,请检查一下。
  • 您为什么不简单地使用具有数据绑定的重复元素来为您处理所有这些事件/id 连接?几乎看起来您正在尝试使用网络表单而不使用网络表单。
  • 我同意。使用 Repeater 或 DataList 控件并检查 ItemCommand 或者您也可以直接处理按钮单击并在模板中找到控件以获取 ID。

标签: c# asp.net


【解决方案1】:

有几种方法可以做到这一点,您可以创建 Button 类的扩展,使用一个属性来保存 ID,或者更简单的技巧可以使用 Button 的 ID 中的 ItemID喜欢:

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 添加一个新属性,更好选项将使用像 GridViewRepeater 这样的控件使用数据绑定。

【讨论】:

  • 如何使用 ItemID?意味着 Button 没有那种类型的属性?我怎样才能使用中继器呢?有什么建议吗?
  • @Crazyzoar,是的 Button 没有保存itemID 的属性,这就是为什么将它存储在按钮的ID 属性中的原因,您没有在任何地方使用它,所以请利用它,这就是 hack,对于 GridView/Repeater 搜索,this 可能是起点。
  • 你能告诉我如何从 aspx 页面获取 DIV id 吗?这是代码示例: div class='adds' id='0' style='float:left;padding:10px;'>
    如何从 Button 获取 id 0?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2023-03-20
    • 2019-06-06
    • 1970-01-01
    • 2018-05-02
    • 2021-02-16
    • 2016-03-21
    • 1970-01-01
    • 2015-12-24
    相关资源
    最近更新 更多