通过 ASP.Net 中的循环在一个网络表单中使用多个相同的用户控件

Using multiple same usercontrol in one webform by a loop in ASP.Net

我有一个用户控件,我想在我的网络表单中通过循环创建一些实例。 一切正常,但所有实例显示相同的数据(最后一个实例的数据)!

我的代码是:(我的用户控件是:WebUserControl)

    MyDataSet.tblMyDataTable oTable = new MyDataSet.tblMyDataTable();
    MyDataSetTableAdapters.tblMyTableAdapter oAdapter
        = new MyDataSetTableAdapters.tblMyTableAdapter();
    oAdapter.Fill(oTable);
    for (int i = 0; i < oTable .Count; i++)
    {
        Context.Items["ID"] = oTable[i].ID;
        WebUserControl newControl = new WebUserControl();
        newControl = (WebUserControl)LoadControl("~/WebUserControl.ascx");
        newControl.ID = "myControl" + i.ToString();
        System.Web.UI.HtmlControls.HtmlTableRow newRow
            = new System.Web.UI.HtmlControls.HtmlTableRow();
        System.Web.UI.HtmlControls.HtmlTableCell newCell
            = new System.Web.UI.HtmlControls.HtmlTableCell();
        newCell.Controls.Add(newControl);
        newRow.Controls.Add(newCell);
        myTable.Rows.Insert(0, newRow);
    }

如果我的uercontrol中出现Page_Load,我的代码是:

    myID = (string)Context.Items["ID"].ToString().Clone();
    ShowNewsSummary(myID);

ShowNewsSummary 是一个填充用户控件字段的函数。

谢谢。

您将在循环的每次迭代中覆盖此上下文项,这意味着将仅保留最后一次迭代...

Context.Items["ID"] = oTable[i].ID;

所有用户控件的Page_Load将仅在父页面'Page_Load`之后触发已完成。

所以你需要使用索引或者ID来存储值...

newControl.ID = "myControl" + i.ToString();
Context.Items[newControl.ID] = oTable[i].ID;

然后获取用户控件中的值...

myID = (string)Context.Items[this.ID].ToString().Clone();