【发布时间】:2009-03-06 13:31:45
【问题描述】:
首先让我指出,这不是一个容易回答的问题。至少它几乎不可能找到答案。
在 UpdatePanel 中,我将一些控件动态添加到我的面板控件中。
List<Showing> showings = cBLL.GetShowings(tenant.Id);
int j = 1;
foreach(Showing showing in showings)
{
UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx");
uc.ID = "showing_" + j;
uc.Visible = true;
((BookShowing)uc).SetShowing(showing);
pnl_showings.Controls.Add(uc);
j++;
}
这一切都发生在从控件异步触发的按钮事件中。
在上面显示的代码中添加的这些字段下方有一个按钮。该按钮也放置在更新面板中。这个按钮叫做:btn_editShowings
现在当我来到 btn_editShowings_Click 事件处理程序时,我的动态添加控件不再存在。我也尝试在 OnInit 中捕获它们,但它们也不存在。
F...怎么可能从动态添加的控件中获取数据??? 无论如何,我不在乎它的性能有多糟糕或其他什么,来解决这个问题?
更新:
我现在尝试执行以下操作,这应该在我读到的 LoadViewState 之前触发 Init 时起作用。
我在 Button 事件中添加了一些动态控件
protected void Button2_Click(object sender, EventArgs e)
{
for (int i = j; i < showno + 4; i++)
{
UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx");
uc.ID = "showing_" + i;
uc.Attributes.Add("runat", "Server");
uc.EnableViewState = true;
uc.Visible = true;
pnl_showings.Controls.Add(uc);
}
UpdatePanel1.Update();
}
我在我的 init 函数中做了同样的事情: 受保护的覆盖无效 OnInit(EventArgs e) { base.OnInit(e);
if (Session["ShowingsCount"] != null)
{
int noOfUCs = (int)Session["ShowingsCount"];
for (int i = 1; i < noOfUCs; i++)
{
UserControl uc = (UserControl)Page.LoadControl("Controls/BookShowing.ascx");
uc.ID = "showing_" + i;
uc.Attributes.Add("runat", "Server");
uc.EnableViewState = true;
uc.Visible = true;
pnl_showings.Controls.Add(uc);
}
UpdatePanel1.Update();
}
}
但是当我尝试这个时:
FindControl("showing_1").Visible = false;
我得到一个空引用异常。
最好的问候 真正的 Napster,再次陷入困境。
【问题讨论】: