我有一个页面(带有repater),用于加载包含更新面板的用户控件。我想在转发器绑定项目时动态加载用户控件(即ItemDataBound
事件)。
用户控制可视加载好,但UpdatePanels在触发时不会更新(我可以看到其他UpdatePanels发生异步回发)。这是因为脚本管理器管理页面的Load
和PreRender
之间的更新面板信息,并且转发器的ItemDataBound
事件发生在此之后(来自this answer)。因此,当我在Page_Load
或Page_Init
加载用户控件时,异步回发工作正常。
问题是,在转发器的ItemDataBound
事件之前,我不知道在哪里插入用户控件。那么,有什么方法可以解决这个问题吗?我可以在Page_Load
加载用户控件并让脚本管理器在控件中注册更新面板,然后将控件放在ItemDataBound
事件处吗?
所以,代码是这样的:
页:
<asp:Repeater runat="server" ID="repeater" onitemdatabound="repeater_ItemDataBound">
<ItemTemplate>
<asp:PlaceHolder runat="server" ID="plhContent" />
</ItemTemplate>
</asp:Repeater>
页面代码隐藏:
protected void repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// dynamically insert the user control in the placeholder
var uc = LoadControl("~/UserControl.ascx");
placeHolder.Controls.Add(uc);
}