日期:2014-05-18  浏览次数:20436 次

向UpdatePanel的Trigger动态添加AsyncPostBackTrigger.
使用了母版页,imgBooking按钮在DataList1中:

  protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
  {
  int iIndex = e.Item.ItemIndex;

  AsyncPostBackTrigger Triger = new AsyncPostBackTrigger();
  Triger.ControlID = "ContentPlaceHolder1_DataList1_imgBooking_"+ iIndex;
  Triger.EventName = "Click";
  UpdatePanel2.Triggers.Add(Triger);
  }

上面代码错误:
未能为 UpdatePanel“UpdatePanel2”中的触发器找到 ID 为“ContentPlaceHolder1_DataList1_imgBooking_0”的控件。

在添加AsyncPostBackTrigger时打开页面查看源代码,imbBooking的ID确实为ContentPlaceHolder1_DataList1_imgBooking_0~N这样的,为什么未能找到呢?

经过多次测试,我发现只要用母版页,即使Button不包含在DataList中,直接
<Triggers>
  <asp:AsyncPostBackTrigger ControlID="ContentPlaceHolder1_Button1" EventName="Click" />
</Triggers>
也未能找到ID,不用母版页就可以。

请高手指教。

------解决方案--------------------
到当前母版页去FindCotrol("ContentPlaceHolder1_Button1").FindControl("UpdatePanel2")试试
------解决方案--------------------
你填的是客户端ID,ControlID需要服务端ID:
Triger.ControlID = e.Item.FindControl("imgBooking").UniqueID;