我有一个用户控件,其中包含一些按钮和占位符。这些按钮导致从占位符添加/删除控件。一切正常。
现在我想将这个用户控件放在一个页面中,并将其包装在一个updatepanel中,如下所示:
<asp:UpdatePanel ChildrenAsTriggers="true" ID="UpdatePanelFoo" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<grid:tablegrid ID="tablegrid_chapters" runat="server" SomeProperty="bar" />
</ContentTemplate>
</asp:UpdatePanel>
当我运行页面时,当我点击用户控件中的一个按钮时,它仍在进行完整的回发。我做错了什么,我该如何解决这个问题?
更新
protected void Page_Init()
{
ScriptManager scr = ScriptManager.GetCurrent(this.Page);
Response.Write("EnablePartialRendering: " + scr.EnablePartialRendering);
}
输出“EnablePartialRendering:true”
答案 0 :(得分:4)
确保页面中的EnablePartialRendering=true
上有ScriptManager
。
看起来您的UserControl没有要查找的事件......您有2个选项。移动UserControl .ascx中的UpdatePanel
,以便它可以看到按钮事件作为子项来装配或添加事件供它查看,为此尝试这样的事情:
public event EventHandler Click;
void btn_del_Click(object sender, EventArgs e)
{
if (NumberOfRowControls > 0)
{
var rowToWhack = panel_rows.Controls.Children().Single(x => x.ID == "myrow" + (NumberOfRowControls - 1));
panel_rows.Controls.Remove(rowToWhack);
NumberOfRowControls--;
}
if(Click != null) Click(this, e);
}
void btn_add_Click(object sender, EventArgs e)
{
var row = NewRow(NumberOfRowControls);
panel_rows.Controls.Add(row);
if(Click != null) Click(this, e);
}
并更新UpdatePanel以寻找它:
<asp:UpdatePanel ID="UpdatePanelFoo" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<grid:tablegrid ID="tablegrid_chapters" runat="server" SomeProperty="bar" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="tablegrid_chapters" EventName="Click">
</Triggers>
</asp:UpdatePanel>
答案 1 :(得分:-1)
确保将ScriptManager添加到页面中,否则没有UpdatePanel功能。