我已经像这样在我的页面中定义了一个占位符;
<asp:PlaceHolder ID="attrPlaceHolder" runat="server"></asp:PlaceHolder>
我正在使用查询字符串 productId 从数据库表中填充这个占位符,如下所示;
// obtain the attributes of the product
DataTable attrTable = CatalogAccess.GetProductAttributes(productId);
// temp variables
string prevAttributeName = "";
string attributeName, attributeValue, attributeValueId;
// current DropDown for attribute values
Label attributeNameLabel;
DropDownList attributeValuesDropDown = new DropDownList();
// read the list of attributes
foreach (DataRow r in attrTable.Rows)
{
// get attribute data
attributeName = r["AttributeName"].ToString();
attributeValue = r["AttributeValue"].ToString();
attributeValueId = r["AttributeValueID"].ToString();
// if starting a new attribute (e.g. Color, Size)
if (attributeName != prevAttributeName)
{
prevAttributeName = attributeName;
attributeNameLabel = new Label();
attributeNameLabel.Text = "<li class=\"txt\">" + attributeName + ":</li>";
attributeValuesDropDown = new DropDownList();
attrPlaceHolder.Controls.Add(attributeNameLabel);
attrPlaceHolder.Controls.Add(attributeValuesDropDown);
}
// add a new attribute value to the DropDownList
attributeValuesDropDown.Items.Add(new ListItem(attributeValue, attributeValueId));
}
但是,当在按钮单击事件中,当我使用 Visual Studio 调试循环遍历这个地方时,我看到 Visual Studio Studio 调试器首先在我的 foreach 循环中点击“ attrPlaceHolder.Controls”字,然后是“ in”关键字(在foreach循环中)但它没有击中前两个单词(即我的foreach循环中的'Control cnt'。它看起来;
protected void ButtonBuyNow_Click(object sender, EventArgs e)
{
// Retrieve the selected product options
string options = "";
foreach (Control cnt in attrPlaceHolder.Controls)
{
if (cnt is Label)
{
Label attrLabel = (Label)cnt;
options += attrLabel.Text;
}
if (cnt is DropDownList)
{
DropDownList attrDropDown = (DropDownList)cnt;
options += attrDropDown.Items[attrDropDown.SelectedIndex] + "; ";
}
}
// Add the product to the shopping cart
ShoppingCartAccess.AddItem(productId, options);
}
基本上我需要填充'options'变量,但它没有触及内部的foreach循环,因此我无法填充'options'变量。这是我的应用程序中的一个严重问题。请告诉我为什么我无法进入 foreach 循环。
注意: 请注意,这不是我整个页面的完整代码。我的其余代码正确执行。