gpt4 book ai didi

asp.net - 动态添加控件和 AJAX

转载 作者:行者123 更新时间:2023-12-02 10:18:10 25 4
gpt4 key购买 nike

首先让我指出,这不是一个容易回答的问题。至少几乎不可能找到答案。

在 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...怎么可能从动态添加的控件中获取数据???无论如何,我不在乎它的性能有多糟糕或其他什么,可以解决这个问题吗?

更新:

我现在尝试执行以下操作,根据我所读到的内容,Init 在 LoadViewState 之前触发,这应该可以工作。

我在按钮事件中添加一些动态控件

    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 函数中做了同样的事情: protected 重写 void 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,再次陷入困境。

最佳答案

  1. 首次添加控件时,请跟踪需要在 View 状态中重新创建的控件数量。
  2. 此后每次回发时,请确保在 LoadViewState 方法中使用相同 ID 将一定数量的控件添加回页面。

关键是您始终必须在每次回发时向页面添加动态创建的控件,并且必须在 View 状态加载之前执行此操作,以便控件将其表单发布的值加载回其中。

关于asp.net - 动态添加控件和 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/618863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com