gpt4 book ai didi

c# - ASP.NET:在回发不同数据后动态添加控件

转载 作者:太空宇宙 更新时间:2023-11-03 22:01:37 24 4
gpt4 key购买 nike

我有一个页面,管理员可以在其中编辑我从 flickr 中提取的一些照片,因此所有控件都是动态添加的。

我将几个控件添加到面板,然后将面板添加到 Form.Controls。他们持有的所有数据都来自 flickr。

我的问题是,在回发列表更改和控件正在加载之后,即使我每次都从 flickr 获取数据,但文本框在回发之前会保留相同的数据。

如果我用更少的文本框执行此操作,一切都会正常进行,这对我来说有什么奇怪的。该列表大约有 10 多张图片,这个数字将来可能会发生变化。

(抱歉我对编程很陌生,代码很乱)这是代码:

protected void Page_Load(object sender, EventArgs e)
{

if (!Page.IsPostBack)
{
RadioButtonList1.AutoPostBack = true;

selectedSetID = getSelectedSetId(RadioButtonList1.SelectedItem.Text);

photoSet = new MyPhotoSet(selectedSetID);
photo = new FlickerImages[photoSet.Count];

for (int j = 0; j < photo.Length; j++)
{
photo[j] = new FlickerImages(photoSet.MediumURLS[j], photoSet.ThumbnailURLS[j], photoSet.Titles[j], photoSet.Descreption[j], photoSet.PhotosID[j]);

panel = photo[j].GetPanelWithEditControls(j);

button = new Button();
button.ID = "sendDataButton" + j;
button.Text = "send data";
button.Click += button_Click;

panel.Controls.Add(button);
Form.Controls.Add(panel);
}

}
else
{
//here is the post back,
every thing load fine.
adding and removing the controls but if the textbox's load in the same place, it hold the same data befor the post back.

RadioButtonList1.AutoPostBack = true;
selectedSetID = getSelectedSetId(RadioButtonList1.SelectedItem.Text);

photoSet = new MyPhotoSet(selectedSetID);
photo = new FlickerImages[photoSet.Count];

for (int i = 0; i < photo.Length; i++)
{
photo[i] = new FlickerImages(photoSet.MediumURLS[i], photoSet.ThumbnailURLS[i], photoSet.Titles[i], photoSet.Descreption[i], photoSet.PhotosID[i]);

panel = photo[i].GetPanelWithEditControls(i);

button = new Button();
button.ID = "sendDataButton" + i;
button.Text = "send data";
button.Click += button_Click;

panel.Controls.Add(button);
Form.Controls.Add(panel);
}

}
}

(对不起我的英语)

最佳答案

不要将控件生成放在 Page_Load 中,而是放在 Page_Init 中。

既然您提到您是 ASP.NET 的新手,我强烈建议您阅读 Page Lifecycle .

作为 ASP.NET 开发人员,了解从服务器收到对 aspx 页面的请求到页面输出以呈现的时间之间服务器上发生某些事情的方式和时间非常重要浏览器。

为什么我建议将代码放在 Page_Init 中的简短解释是运行时如何处理动态创建的控件和 Viewstate。 Viewstate 包含您的网络应用程序的用户所做的任何更改。在页面生命周期中,您会注意到 Viewstate 值的应用发生在 Page_Load 之前,但在 Page_Init 之后。

这意味着如果您的代码位于 Page_Load 中,则控件是从 Viewstate 生成的,并根据用户输入的内容进行更新,但是您自己在 page_Load 中的代码会使用默认值重新生成这些控件。此事件后不会发生任何可以重新加载用户输入的事情。

(希望这是有道理的。如果没有,我链接到的页面可能会更好地解释它。)

here 上还有另一篇文章从不同的角度解决了该主题,但对您仍然很有帮助。

还有超短版here .

最后,(最好的留到最后)可以找到关于该主题的最全面的文章之一,它用通俗易懂的英语解释了事情 here .

关于c# - ASP.NET:在回发不同数据后动态添加控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880299/

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