我正在尝试将UpdatePanel提取到子UserControl,以便我可以在同一页面中多次使用它。但是,当我从主页面调用子控件上的__doPostback时(在页面加载结束时 - 在加载数据之前需要获取其他一些东西),它会刷新整个页面,从而导致无限循环。 / p> 但是,真正让我感到震惊的是,当完全相同的UpdatePanel嵌入主页而不是在子控件中时,部分回发会起作用!我希望有人知道为什么。
MainPage.ascx:
<%@ Register TagPrefix="test" TagName="GridControl" Src="~/Controls/GridControl.ascx" %>
<asp:ScriptManager ID="SM" runat="server" EnablePageMethods="true">
<test:GridViewControl ID="child" runat="server" />
<asp:UpdatePanel ID="embedded" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView runat="server" AllowPaging="true" OnPageIndexChanging="gridView_PageIndexChanging">
<Columns>
...
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
MainPage.js:
pageLoad = function ()
{
// Works great: no infinite loop, GridView paging works, embedded.Visible=false hides the grid
__doPostBack("<%= embedded.ClientID %>");
// All of the problems
$("#grid").update();
}
pageLoad();
ChildControl.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="GridControl.ascx.cs" Inherits="Control" %>
<script type="text/javascript">
var upClientID = "<%= updatePanel.ClientID %>";
// Trigger the post-back so that the update panel re-loads data.
$.fn.update = function ()
{
__doPostBack(upClientID);
};
</script>
<!-- Exactly the same as the embedded UpdatePanel -->
<asp:UpdatePanel ID="updatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="gridView"runat="server" AllowPaging="true" OnPageIndexChanging="gridView_PageIndexChanging">
<Columns>
...
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
我实际上遇到了很多关于这个子控件的问题 - 设置Visible属性没有做任何事情,GridView分页不起作用......让我感到惊讶的是创建一个简单的子控件应该是这样的困难的。
答案 0 :(得分:0)
(回答我自己的问题)
不完全解决问题,但我最终将UpdatePanel嵌入到主页面中,并将GridView作为子控件提取出来。仍然有一些重复的代码,但回发开始工作正常。