Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#在数据绑定ListView中动态创建的ImageButton不';回邮_C#_Listview_Data Binding_Postback_Imagebutton - Fatal编程技术网

c#在数据绑定ListView中动态创建的ImageButton不';回邮

c#在数据绑定ListView中动态创建的ImageButton不';回邮,c#,listview,data-binding,postback,imagebutton,C#,Listview,Data Binding,Postback,Imagebutton,我很确定我知道为什么会发生这种情况,本质上是控件在页面生命周期中动态创建太晚,事件wireup系统无法看到它,但我不确定该怎么办: 我有一个列表视图,显示我的自定义论坛的论坛帖子。有些帖子有附件。在ItemDataBound事件期间呈现附件:搜索项目内容以查找asp占位符,动态创建ImageButton并将其添加到占位符: ImageButton ib_Delete = new ImageButton(); ib_Delete.ID = "ib_DeleteAttachm

我很确定我知道为什么会发生这种情况,本质上是控件在页面生命周期中动态创建太晚,事件wireup系统无法看到它,但我不确定该怎么办:

我有一个列表视图,显示我的自定义论坛的论坛帖子。有些帖子有附件。在ItemDataBound事件期间呈现附件:搜索项目内容以查找asp占位符,动态创建ImageButton并将其添加到占位符:

      ImageButton ib_Delete = new ImageButton();
      ib_Delete.ID = "ib_DeleteAttachment_" + myfile.Id.ToString();
      ib_Delete.ImageUrl = "~/images/icons/delete.png";
      ib_Delete.Width = 16;
      ib_Delete.Height = 16;
      ib_Delete.CssClass = "attachmentDeleteButton";
      ib_Delete.OnClientClick = "return ConfirmDeleteAttachment();";
      ib_Delete.CommandArgument = mf.Id.ToString() + '@' + m.Id;
      ib_Delete.Click += new ImageClickEventHandler(DeleteMessageAttachment_Click);
      myPlaceHolder.Controls.Add(ib_Delete);
现在,.cs中的DeleteMessageAttachment\u Click方法永远不会激发,javascript onclick看起来确实像:

onclick=“return ConfirmDeleteAttachment();”

实际上,我从同一项目的另一个页面复制了ImageButton创建代码,该页面没有在数据绑定相关事件中呈现ImageButton,客户端的代码如下所示:

onclick=“返回 ConfirmDeleteAttachment();WebForm_DoPostBackWithOptions(新) WebForm_PostBackOptions(“ctl00$ctl00$cphPage$MC2$ib_DeleteAttachment_12345”, “”,true,“”,“”,false,false))”

…所以我很确定这是个问题,因为我在页面生命周期的错误点创建控件,但问题是如何在正确的时间创建控件?在我的页面加载中,我是否应该预先创建一堆ImageButton并将它们保存在一个类范围的字典中,以便在正确的时间将它们取出?如果我这样做,事件连线系统会看到他们吗?只是不知道人们如何确保在正确的时间创建内容,以便在其他时间使用


谢谢大家

您必须在page_init或page_load(最晚)中重新创建与以前相同ID的控件。为什么要动态创建它们?您可以使用另一个嵌套的web数据绑定控件,如
Repeater
来创建
图像按钮。。呃。。这就是另一个页面中的情况,我只是将代码放入ListViewItemDataBound事件处理程序中,将它们呈现到页面上。我很难想象我是如何按照您建议的方式使用Repeater控件的:如果一个问题有20个答案,每个答案有2到5个附件,并且答案在listview数据绑定事件中呈现,那么Repeater是否也只会在错误的时间呈现它们?我会去看看如何使用中继器,这样我真的觉得我对我所说的有点了解……)我不知道如何嵌套中继器,并让它以相关的方式与数据源(MindScape Lightspeed)一起工作-我可以找到大量数据集/数据关系的示例,我理解这是一个范例,但Lightspeed相对较新,维护这个项目也是如此。。我应该换一种方式来做这件事吗?