我正在创建一个动态菜单,从数据库中提取菜肴并将其显示给用户,以便他可以将它们添加到他的订单中。每当我从数据库中检索一行时,我都会将它发送到我的menuItems类,这样就可以读取列并创建显示格式并将其插入到单元格中:
foreach (DataRow dr in drc){
//extract the dish data from the row into a cell
TableCell c1 = menuItem.makeItemCell(dr);
//display it
tr.Controls.Add(c1);
table1.Controls.Add(tr);
}
c1将是一个包含菜品信息的单元格以及数量下拉列表和"添加到订单"按钮:
public static TableCell makeItemCell(DataRow dr)
{
TableCell tc = new TableCell();
Image img = new Image();
img.ImageUrl = (string)dr["img"];
tc.Controls.Add(img);
//rest of information adding is omitted for brevity
String myLiteral = "<p>" + "Name: " + (string)dr["NameofDish"] + "</br>";
tc.Controls.Add(new LiteralControl(myLiteral));
//add quantity label and dropdownlist populated with possible quantity values
Label lb = new Label();
lb.Text = "Quantity: ";
DropDownList ddl = new DropDownList();
for (int i = 0; i < 13; i++)
{
String t = i.ToString();
ddl.Items.Add(new ListItem(t, t));
}
//create the add to order button
Button btn = new Button();
btn.Text = "Add to order";
tc.Controls.Add(lb);
tc.Controls.Add(ddl);
tc.Controls.Add(btn);
return tc;
}
我的问题是处理按钮点击事件。我所有尝试将它与事件处理程序绑定(在menuItems类或代码隐藏本身上)都失败了。我只能设法更新按钮的postbackURL,如果它在单元格中创建,就像这样
btn.PostBackUrl = "./menu.aspx?dish=" + (string)dr["ID"] + "&quantity=" + ddl.SelectedValue;
但是在创建单元格时会呈现.selectedvalue值,因此始终为0
我的问题是:如何处理按钮点击事件,以便我能够掌握dishID和所选值。
<(>(((如果可能的话,我更喜欢事件处理解决方案而不是查询字符串))))谢谢!
编辑: 我的整个问题是,单元及其组件是在外部类中创建的,并发送回我的代码。如果我没有元素ID或任何内容,我如何从我的代码隐藏中访问下拉列表变量