<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Repeater ID="rptList" runat="server" OnItemDataBound="rptList_ItemDataBound" OnItemCommand="rpList_ItemCommand">
<ItemTemplate>
<asp:Button ID="btnEdit" runat="server" Text="编辑" OnClick="btnEdit_Click" />
</ItemTemplate>
</asp:Repeater>
<asp:Button ID="btnAdd" runat="server" Text="添加" OnClick="btnAdd_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
一般情况下 UpdatePanel内控件采用如下方法即可
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAdd" EventName="Click" />
</Triggers>
但如果btnAdd是在包含在UpdatePanel内的Repeater内的控件,则会报错类型“System.Web.UI.UpdatePanel”不具有名为“xx”的公共属性
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnEdit" EventName="Click" /> <!--这样是不行的-->
</Triggers>
解决方法:
不在Triggers标签中设置,在控件对应事件中设置
protected void btnEdit_Click(object sender, EventArgs e)
{
ScriptManager.GetCurrent(this.Page).RegisterPostBackControl((Button)sender);
...
}
如果ScriptManager在母版页中,则需先找到
((ScriptManager)Master.FindControl("ScriptManager1")).RegisterPostBackControl((Button)sender);