在我的页面加载方法中,我正在用数据填充 HTML 表。
默认情况下,表为空。
<table runat="server" id="categoriesTable">
</table>
动态创建每一行后,我向其中添加 4 个单元格,并为每个单元格指定一个 ID,以供以后使用。
创建所有单元格后,我重新遍历此表,以便可以在每个单元格中添加一个列表<li></li>
,这些列表中的数据是从数据库中获取的,这取决于之前给每个单元格的 ID。
当我刷新页面时,没有任何问题,但是在PostBack
(单击某个 ASP 按钮或更改 DropDownList 的选定索引后),单元格的数量保持不变,但每个单元格内的列表增加了一倍。
意味着,如果我有这个:
Cell1
-Da
-Do
-Di
-Du
Cell2
-Ya
-Yo
Cell3
-Ka
-Ki
在 PostBack 之后我会有这个:
Cell1
-Da
-Do
-Di
-Du
-Da
-Do
-Di
-Du
Cell2
-Ya
-Yo
-Ya
-Yo
Cell3
-Ka
-Ki
-Ka
-Ki
这是代码,注意cCategory是我创建的一个类,它的方法返回一个List<cCategory>
.
//Load Categories Into the Table
List<cCategory> mainCategoriesList = cCategory.SubCategories(null);
if(mainCategoriesList.Count!=0)
{
//Categories Available
HtmlTableRow Row = new HtmlTableRow();
categoriesTable.Rows.Add(Row);
HtmlTableCell Cell;
int cellCounter = 0;
while(cellCounter<mainCategoriesList.Count)
{
if (cellCounter % 4 == 0 && cellCounter!=0)
{
//Add a New Row
Row = new HtmlTableRow();
categoriesTable.Rows.Add(Row);
}
Cell = new HtmlTableCell();
Cell.InnerHtml = "<a href=\"Category.aspx?id=" + mainCategoriesList.ElementAt(cellCounter).CategoryID() + "\">" + mainCategoriesList.ElementAt(cellCounter).Category()+ "</a>";
Cell.ID = mainCategoriesList.ElementAt(cellCounter).CategoryID();
Row.Cells.Add(Cell);
cellCounter++;
}
//Now we must add the sub categories
String subList = "";
String newContents;
int counter;
List<cCategory> subCategoriesList;
for (int i = 0; i < categoriesTable.Rows.Count; i++)
{
//For each Row, go through each Cell
for (int j = 0; j < categoriesTable.Rows[i].Cells.Count; j++)
{
//For Each CELL, get the subCategories
subCategoriesList = cCategory.SubCategories(categoriesTable.Rows[i].Cells[j].ID);
counter = 0;
while (counter < subCategoriesList.Count)
{
subList = subList + "<li><a href=\"Category.aspx?id=" + subCategoriesList.ElementAt(counter).CategoryID() + "\">" + subCategoriesList.ElementAt(counter).Category() + "</a></li>";
counter++;
}
newContents = "<div class=\"subCategoriesList\"><ul>" + subList + "</ul></div>";
subList = "";
categoriesTable.Rows[i].Cells[j].InnerHtml = categoriesTable.Rows[i].Cells[j].InnerHtml + newContents;
}
}
}
为什么 Cell 数据会翻倍?